1結構體
1.只有結構體變量才分配地址,定義是不需要的。
2.用sizeof關鍵字求結構體長度時,返回的最大基本類型所占字節的整數倍。所以說結構體的大小一定是里面最大的整數倍數。
2指針
在了解指針前,先要理解地址和數據,你可以想象有很多盒子,每個盒子有對應的號碼,那個號碼叫做“地址”,而盒子里放的東西叫做“數據”。
1.指針是一種保存變量地址的變量。
2.用指針有個好處就是可以輕易共享內存數據,使得程序更加高效。
3.int *p和int **p的區別:int *p表示地址所對應的數據是一個int類型的值,int **p表示的就是p地址里面的數據其實還是一個int類型的指針地址,所以訪問
值的時候,前者是*p,后者是**p。

前者就是給你一把鑰匙你就去找箱子,后者就是給你一把鑰匙你去找鑰匙再去找箱子。
4.p++和(*p)++,一個加地址,一個加數據。
這里提一嘴*p,p,&p的區別,*p很簡單就是指向地址的數據,p就是指向的地址,&p的話,你首先的了解其實p本身也是個變量,但是只是它是指針變量而
已,是變量你就有地址和數據這兩個信息,數據用來存它所指向的變量的地址,所以&p就是表示它的地址。
3數組
1.數組的名就是數組的地址,數組的一個元素的地址也是數組的地址,比如arr,和&arr[0].
2.多維數組的本質其實就是一維數組在定義一個數組,只是邏輯上把它看成多維而已,類似於隊列那兒看成環形隊列。
3.函數返回數組,可以用指針函數返回。(首先它是一個函數,只不過這個函數的返回值是一個地址值。函數返回值必須用同類型的指針變量來接受,也就是說,指針函數一定有"函數返回值)。
#include<stdio.h> int *funtion() { static int arr[3];//C不支持在函數外返回局部變量的地址,除非定義局部變量為 static 變量。 for(int i=0;i<3;i++) { arr[i]=i+3; } return arr; } int main() { int *p; p=funtion(); for(int i=0;i<3;i++) { printf("%d",*(p+i)); } return 0; }
不對的請指出,謝謝觀看者。
