C語言指標和數組

來源:互聯網
上載者:User

標籤:sans   view   指標的使用   middle   space   title   display   init   label   

C語言指標和數組binsearch else-if  shellsort  insertsort  指標和地址

指標是程式設計語言中的一類資料類型及其對象或變數,用來表示或儲存一個記憶體位址,這個地址的值直接指向(points to)存在該地址的對象的值
取值運算*p返回儲存在記憶體位址為p的記憶體空間中的值。取地址&p運算則返回運算元p的記憶體位址
C語言是以傳值的方式將參數值傳遞給被調用函數,被調用函數不能直接修改主調函數中的值,需要修改主調函數中的值就需要利用指標

指標和數組

數組名代表的是該數組的第一個元素的地址,對於a[i]的引用可以寫成*(a+i)或者*(pin + i)或者pin[i],通過數組名和下標實現的運算式可等價通過指標和位移量實現

int a[10];int *pin;pin = &a[0];pin = a;pin = pin + 1;pin = &a[1];pin = a + 1;

不同的是數組名和指標之間,數組名代表的是一個常量,相反指標代表的是一個變數,因此pin = apin++是合法的,而a = paa++是錯誤的

地址算術運算

指標可以進行比較運算:指向同一個數組的指標可以進行== <= >= !=
同樣指標可以進行與整數相加或相減運算,如p+n其中n的長度不是固定的,會隨著指標等比例的縮放,減法也是相同的
指向同個數組的兩個指標可以相減或者比較運算如p-q+1代表兩指標之間的元素個數
指標不可進行上述以外的其他運算,如兩指標之間的相加運算、乘除運算等,同double或者float之間的加減運算,以及強制轉換運算

字元指標和函數

字串常量就是一個字元數組:"I am a string",在內部表示中字元和\0組成

char amessage[] = "now is the time";  //定義一個數組char *message = "now is the time"; //定義一個指標

對於第一種情況,定義了一個數組,其中amessage指向這個字元數組的第一個字元,固定不變,數組中的單個字元可以進行修改。而對於第二種情況,message指向一個字串常量,只是將一個指向該字串常量的指標賦值給了message,並沒有進行字串的複製,只是涉及到指標的操作,C語言沒有提供處理整個字串的運算子。

指標數組以及指向指標的指標

指標數組和數組指標的區別,指標數組就是一個數組,而這個數組的每一個元素都是一個指標;數組指標是一個指標,而這個指標指向一個數組

int a[10];int *p[10];int (*p)[10] = &a; //數組指標的使用


enter description here

a&a的區別,對於a數組名的值就是一個指標常量,也就是指向數組的第一個元素(代表第一個元素的地址),&a指向的是整個數組,然而&aa的值相同,不同的是&a+1a+1代表的含義不同,&a+1增加了整個數組的長度,a+1增加了一個元素的長度(a[1]

多維陣列

daytab[i][j]表示一個二維數組,如果要將一個二維數組作為一個參數傳遞給函數,那麼必須在函式宣告中指明數組的列數(與數組的行數沒有多大的關係)。怎麼解釋啦?向函數傳遞的是一個指標,這時就是傳遞的就是一個具有j個元素的行向量,也就是前面所說的數組指標

可以從上面的多維陣列可以得出:數組指標的每一行的長度相同。這也是和指標數組不同的地方,指標數組的每個指標指向的長度可以不一樣

char *name[] = {"illegal month", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}

上面定義的就是一個指標數組的初始化,每個元素的長度都不一樣,name[0](或者name)指向的就是第一個元素

命令列參數

在支援C語言的環境中,可以在程式開始時將命令列參數傳遞給程式。調用主函數main時,它帶有兩個參數,第一個參數(習慣為argc,用於參數計數)表示命令列中參數的數目,第二個參數(習慣為argv,用於參數向量)是一個指向字串數組的指標,其中每個字串對應一個參數
int main(int argc, char *argv[])

argv[0]表示函數名,因此argc的值至少為1,第一個選擇性參數為argv[1],最後一個選擇性參數為argv[argc - 1]

C語言指標和數組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.