#一級指標、二級指標、指標和陣列、指標陣列總結我們在乙個程式中已經使用了一級指標了,如果想修改這個一級指標或者這個一級指標指向的內容,就會使用到二級指標了,但是,為了**的可讀性,最好用二級以下的指標解決。
指標變數需要指向乙個記憶體空間,記憶體空間相當於門牌號,而對乙個指標解引用(*),相當於間接訪問這個指標變數中儲存的位址裡面對應的內容。
//指標指向元素
int main()
輸出的結果為:w w
//指標指向陣列:
int arr[10] = ;
int* p = arr; // 陣列在函式中除了 strlen 與 & 這兩種情況以外,都代表首元素的位址。
printf("%d\n", *p);
printf("%d\n", *(p + 1)); // 這裡面 p +1 其實是 增加了 p 所指向資料型別大小位元組的空間,p 開始是 1 的 位址, p +1: 因為 p 是int 型 指標,int 佔 4個位元組,所以要給 p 裡面的位址加上 4,這樣 p 的內容就變成給了 2 的位址;
這裡輸出結果是:
1 2
int arr[5] = ;
int* p = ;
int** q = p;
printf("%d ", **q);
printf("%d ", **(q + 1));
printf("%d ", **(q + 2));
輸出結果:
1 2 3
##指標陣列:定義 int (*p)[n]
()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n。執行p+1時,p要跨過n個整型資料的長度。
將二維陣列賦給一指標:
int a[3][4];
int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。
p=a; //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]
p++; //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]
所以陣列指標也稱指向一維陣列的指標,亦稱行指標。
##指標陣列定義 int p[n];
**優先順序高,先與p結合成為乙個陣列,再由int說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下乙個陣列元素,p=a; 這裡p表示指標陣列第乙個元*素的值,a的首位址的值。
如要將二維陣列賦給一指標陣列:
int *p[3];
int a[3][4];
for(i=0;i<3;i++)
p[i]=a[i]
這裡int *p[3] 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]賦值時需要分別賦值。
陣列指標只是乙個指標變數,它占有記憶體中乙個指標的儲存空間。
指標陣列是多個指標變數,以陣列形式存在記憶體當中,占有多個指標的儲存空間。
一級指標 二級指標 指標和陣列 指標陣列
一級指標 int p 上述 定義了乙個一級指標變數,int為基型別。指標變數的基型別用來指定此指標變數可以指向的變數的型別。一級指標變數也就是儲存著另外乙個變數位址的變數 在定義指標時應注意指標變數必須指定基型別。且必須給指標變數賦初值,在不確定該指標變數要指向什麼的時候應該給其賦null,否則該指...
一級指標 二級指標 指標和陣列 指標陣列
一級指標存放的是變數的位址 一級指標名就可以等於這個位址 二級指標存放的是一級指標的位址,同樣指標名就是這個位址 陣列指標是乙個指標 它所存放的位址是陣列變數的位址,即指向不同陣列 所以說一級指標 二級指標 陣列指標都是指標,只是型別不同 而指標陣列,是乙個陣列,他存放的資料型別是指標型別 p是指標...
一級指標 二級指標 指標和陣列 指標陣列總結
1.指標 指標是個變數,用於存放記憶體單元的位址 編號 2.一級指標 舉例 int a 8 int p a p是乙個一級指標,它存放的是變數a的位址,對p解引用得到的就是a的值。int a 3 int p a 這裡的p也是乙個一級指標,存放的是陣列的首位址,陣列名就是陣列的首位址,對p解引用得到的是...