C語言 詳解多級指標與指標型別的關係

2021-09-08 01:17:50 字數 1592 閱讀 2678

//

v推論①:指標變數的步長只與『指標變數的值』的型別有關(指標的值的型別 == 指標指向資料的型別)

//指標型別跟指標的值有關,指標是佔據4個位元組大小的記憶體空間,但是指標的型別卻是各不相同的

//指標的型別決定了指標指向的記憶體空間從哪個位置開始,從哪個位置結束

//普通變數名是一段記憶體空間的標識,普通變數名代表的是一段記憶體空間,

//對於複雜變數(例如指標):要知道某個指標的步長,必須確定指標的型別

//指標的值永遠是乙個十六進製制數字,但是這個十六進製制數字指向的記憶體空間卻是不相同的

//int a[5]; char *arr[4]=;對於這2個一維陣列而言

//a是乙個指標,a指標的值是a[0]這個int型變數的位址,所以a的型別是int *;

//arr是乙個指標,arr指標的值是arr[0]這個char *型變數的位址,所以arr的型別是char **

//有人會想a的型別是int *,那麼a的步長應該是sizeof(int *) 是4;其實不對,a的步長應該是a指向的記憶體空間的大小

//a指向的記憶體空間是int型的變數a[0],a[0]的大小是4個位元組,因此a的步長是sizeof(int) 是4 雖然都是4 但是意義不一樣

//再來討論arr,由以上推論可得,arr的步長應該是arr指向記憶體空間的大小,arr指向記憶體空間是乙個字串的指標,

//字串的指標的大小是 sizeof(char *) = 4 個位元組,所以arr的步長是4個位元組

//舉例int a[5]=,討論a和&a的步長

//a指向的是乙個int型變數(上面已經詳述),a的步長是sizeof(int) = 4;

//&a這指標指向的是乙個int型的一維陣列,這個int型的一維陣列的大小是sizeof(int)*5 = 20;

//所以&a的步長是20

//v推論②:多級指標是人為為『指標本身』做的一種區分

//二級指標是指標本身型別的一種人為自定類別,但通常意義上指標的型別沒有任何關係

//一級指標與二級指標的區別在於,一級指標的值是某種型別的資料的位址,而二級指標的值是乙個指標的位址

//指標的步長只跟指標的型別有關係,跟指標是幾級指標沒關係

#include

#include

void

main();

printf(

"%x\n

", &a); //

列印 76fc54

printf("

%x\n

", &a + 1); //

printf("

\n-----------------\n");

char *myarr = ;

printf(

"%x\n

", myarr); //

列印 81fe88

printf("

%x\n

", myarr + 1); //

列印 81fe8c 得出結論:myarr的步長是4

system("

pause");

}

C 多級指標

可以認為,指標是c 這把寶劍最鋒利的部分,當然,如果你使用不當,也會傷到自己的 何為11級指標,其實,就是在指標前面加了11個 加乙個 就是1級指標,加兩個 就是二級指標 char qqptr null 指標和陣列有著扯不清的關係,這個11級指標,你可以理解為11維度的陣列,平日裡見得最多的恐怕也就...

C語言學習筆記 指標 多級指標

指標的指標 如果乙個指標變數存放的是另乙個指標變數的位址,則稱這個指標變數為指向指標的指標變數。假如定義了乙個二級指標 int q 對於上述例子的二級指標,我們可以把int q拆分成兩部分看 即int 和 q 後面 q 中的 表示 q 是乙個指標變數,前面的int 表示指標變數 q 只能存放int ...

C語言學習筆記 指向指標的指標 多級指標

在指向指標的指標這一塊,從大一開c語言課的時候就沒弄明白,現在快畢業了,重新拾起c語言,多少是明白了一點 在這塊的介紹上,文字描述太難懂太繞了,咱直接上例子,看 debug一下,看看記憶體和位址的分配情況就差不多能明白了 例項程式 程式輸出 the value of myvar is 12.the ...