8 9指標重點

2021-07-16 09:08:45 字數 1441 閱讀 5973

今天學習了很繞很繞的指標。

早上學的是指向指標的指標,指標變數也是變數,佔據一定的記憶體空間,有位址,因此可以用乙個指標指向他。可以用**p表示,乙個*表示乙個位址,*p = 變數的位址,**p = 變數的位址上的數值的位址,**p是自己也有記憶體。指標型別和指向指標的資料或指標型別一致。

int a=10;

int *p=&a;   給指標p賦值a的位址

printf("%d,%d",a,*p); 結果輸出10 ,10;

int **p1 = &p;

printf("%d",**p1);     結果輸出10;

下午學習的是指標的運算:

p = &a ;      (將變數a位址賦給p)

p = a;            (將陣列a首位址賦給p)

p = &a[1];        (將陣列元素位址賦予p)

乙個型別為t的指標的移動以sizeof(t)為移動單位

int a[3]=;

int *p;                            分兩步寫

p=&a[0]或者寫成p=a;

for(int i = 0;i

printf("%d",a[i]);       輸出1,4,2    這一行和下一行是等價的

printf("%d",*(p+i))     輸出1,4,2   乙個型別為t的指標的移動以sizeof(t)為移動單位,比較兩個指標的大小實際上是比較兩個位址的前後,在後面的大,所以 p的位址每加i,*(p+i)就是取*p後面的那個位址的值,就可以做到依次取出陣列裡面的值。

printf("%d",*p++);     輸出1,4,2   先執行++,這裡是優先順序的問題,所以下面的情況是錯誤的

printf("%d",(*p)++);  輸出1,2,3 }

指標與陣列:指向陣列元素的指標變數 a[i]<==>p[i]<==>*(p+i)<==>*(a+i)

通過指標引用多維陣列,a[i]+j代表a[i][j]的位址,a[i]表示某一行的首位址,j是第幾列

*(a[i]+j)=a[i][j]

*(*(a+i)+j)等價於*(a[i]+j)

int a[3][3]=,,};

int *p;

p=&a[0][0];或者可以寫為p=&a,意思都是取a陣列的首位址

1。for(int i = 0;i<9;i++)

2.for(int i = 0;i<3;i++)

指標(三) 指標陣列

指標陣列定義 一維指標陣列的定義形式 型別名 陣列名 陣列長度 char p 5 乙個陣列,若其元素均為指標型別資料,稱為指標陣列,指標陣列中的每乙個元素都相當於乙個指標變數。指標陣列的初始化 使用位址為指標陣列初始化 char p 5 指標陣列和二級指標 int main char temp 定義...

C語言(九) 指標(3)指標與const

表示一旦得到了某個變數的位址,不能再指向其他變數 int i 0 int const q i q是 const q 20 ok q error表示不能通過指標去修改這個變數 int i 0 int j const int p i const int p 等同於 int const p p 20 er...

51指標定義

c51指標型別和儲存區的關係詳解 轉貼 一 儲存型別與儲存區關係 data 可定址片內ram bdata 可位定址的片內ram idata 可定址片內ram,允許訪問全部內部ram pdata 分頁定址片外ram movx r0 256 byte 頁 xdata 可定址片外ram 64k 位址範圍 ...