int a 1,2,3,4int p intint a 1P指向了什麼

2021-04-18 03:48:43 字數 3478 閱讀 1642

1樓:饅頭上線了

1. int a = {}; 貌似應該是int a = {};

2. "(int)a",已經把a的地址強轉成int型數字(32bit),所以「((int)a+1); 」實際指向了整個陣列記憶體塊的第二個地址,即a[0]的第二個位元組。

3.這種用法比較危險,特別是在某些特殊處理器上,如果對32bit(int)變數的訪問,訪問地址不是4位元組對齊的話,會有想不到的***。你可以將記憶體看做是一個字元型的大陣列,指標其實也是一個整數,它存貯著某個整型值,假設記憶體陣列名為m,那麼訪問指標指向的元素其實就是m[(int)p]。

在對指標本身做加減法的時候,如果增加或者減小到的值為1,那麼系統其實預設的得到的指標值是 p + sizeof(t) * 1,這裡你吧a轉換成了一個整數,並取得了該整數加1的值,其實你的到的是p + 1,所以p的指向就向前移動了一個位元組,指向了a【0】的第二個位元組的地址。

2樓:李磊

你可以將記憶體看做是一個字元型的大陣列,指標其實也是一個整數,它存貯著某個整型值,假設記憶體陣列名為m,那麼訪問指標指向的元素其實就是m[(int)p]。在對指標本身做加減法的時候,如果增加或者減小到的值為1,那麼系統其實預設的得到的指標值是 p + sizeof(t) * 1,這裡你吧a轉換成了一個整數,並取得了該整數加1的值,其實你的到的是p + 1,所以p的指向就向前移動了一個位元組,指向了a【0】的第二個位元組的地址。

其實指標的這種特性會經常使用在同種型別值需要不同解釋的情況,比如要判斷機器的大小端(大小端可以上網查詢),你可以定義一個共用體:

union hl;

在程式中你可以初始化:

hl.ele = 0;

然後你再定義一個字元型指標:

char *p = hl.ele[0];

你就可以通過(*p)的值判斷機器的大小端了。

答案為什麼是5?

3樓:匿名使用者

這個問題的關鍵是理解 &a

a是一個陣列名,也就是陣列的首地址。

對a進行取地址運算子,得到的是一個指向陣列的指標!!!!這句話尤為重要!

也就相當於

int (*p) [5] = &a;

p是一個指標,它指向的是一個包含5個int元素的陣列!!

那麼執行p+1後,p的偏移量相當於 p + sizeof(int) * 5 !!

而程式中強制將指標p轉換成一個int* 那麼 p -1 其實就是 p - sizeof(int)

所以,p -1 指向了陣列中得最後一個元素,也就是 5

4樓:匿名使用者

&a + 1

&a的型別為 int (*)[5] 那麼&a+1 後 +1 其實 +上5*sizeof(int)的大小

然後你你又強轉為int*型別 而p-1 減去的其實就int的大小 因為他的型別為int*

5樓:匿名使用者

肯定是5啊你認為是什麼

答案為什麼是5?如題 謝謝了

6樓:憽人擦

這個問題的關鍵是理解 &a a是一個陣列名,也就是陣列的首地

址。 對a進行取地址運算子, 得到的是一個指向陣列的指標 !!!!這句話尤為重要!

也就相當於 int (*p) [5] = &a; p是一個指標,它指向的是一個包含5個int元素的陣列!! 那麼執行p+1後,p的偏移量相當於 p + sizeof(int) * 5 !! 而程式中強制將指標p轉換成一個int* 那麼 p -1 其實就是 p - sizeof(int) 所以,p -1 指向了陣列中得最後一個元素,也就是 5

麻煩採納,謝謝!

是多少?

7樓:匿名使用者

5。p=&a+1指向的是陣列組a[4]的後面一個int單元,

p-1指向a[4]=5

「int **p」和「int *p」有什麼區別?

8樓:怕不他啊不了

int *p表示的是一級指標,表示p所指向的地址裡面存放的是一個int型別的值。

int **p表示的是二級指標,表示p所指向的地址裡面存放的是一個指向int型別的指標。

一級指標存放變數的地址,指向的值是變數的內容。如int* p=, p=陣列的首地址,*p=陣列的第一個值;

二級指標存放一級指標的地址,指向一級指標。如int*p =, int**pp=&p,pp=指標p的首地址,*pp=陣列的首地址,**pp=陣列第一個值1。

指標陣列的陣列名傳遞引數對應為指標的指標即二級指標,二維陣列的陣列名傳遞引數對應為陣列指標即指向一維陣列的指標

一級指標通過形參,可以修改實參中指標所指向的地址中的值。修改不了實參中指標所指向的地址。需要藉助二級指標才可以。

9樓:尉詩桃牟畫

int*p

:一級指標,表示p所指向的地址裡面存放的是一個int型別的值int**p

:二級指標,表示p所指向的地址裡面存放的是一個指向int型別的指標(即p指向的地址裡面存放的是一個指向int的一級指標)

例如:int

i=10;

//定義了一個整型變數

int*p=&i;

//定義了一個指標指向這個變數

int**p1=&p;

//定義了一個二級指標指向p指標

那麼取出10的值方式為:

printf("i=[%d]\n",*p);

printf("i=[%d]\n",**p1);

答案為啥是5?

10樓:匿名使用者

&a 代表的是一維陣列行地址 加1 即加1行 因此 &a+1 即為&a[5] 。

int *p=(int *)(&a+1) 即p儲存了&a[5]的地址 p[-1] 即p - 1, 為a[4].

11樓:夢醒還追

int *p=(int *)(&a+1);對於a[5]來說a是該陣列

的首地址,而&a是該陣列的行地址,雖然值是一樣,但意義不同版,而&a+1則表示該陣列儲存單權元的後一個地址,a+1表示陣列的第二個元素的地址。p[-1]表示p所在地址減一的地址下的值,也就是a[4]的值

12樓:天揚龍小四

個人理解 int *p=(int *)(&a+1); 這裡相當於把一維陣列變成2維陣列了

設int a執行表示式 a 1,2,3 ,a 1後,a和表示式的值是多少

逗號表示式 中巢狀 逗號表示式 逗號表示式 中巢狀 賦值表示式 逗號表示式 優先順序最低 a 為1 表示式值為 a 1 的值 為2 設int a 12 表示式a a a a 的值是 計算出來的值為 120 具體計算步驟如下 1 a a 為144 2 a a a 等價於 a 144 即 a a 144...

語文1 2 3 ,語文1 2 3

1 祥和 詳細復 翱翔 寧死不降 刻舟求制劍 一箭雙鵰 鑑賞 踢毽子 堅持不懈 一瀉千里 洩氣 推卸責任 2 蒼勁c ng j ng 青q ng 苔t 陶冶 t o y 因為y n w i 3 相親相愛 日削月割 學高為師 亦師亦友 息息相通 五花八門4 一元復始,人們又迎來了 鳥語花香 的春天,處...

若有說明語句inta61,2,3,4,

1 a 3 4 注意陣列下標一般從0開始 2 a.對陣列進行初始化,要麼兩個維度都不寫,由內賦值的陣列確容定,或者第二維可以不寫,第一維要寫,再由賦值陣列確定 故b d錯 c中的是一個元素 12.若有說明 int a 3 1,2,3,4,5,6,7 則陣列a第一維的大小是 若有說明 int a 3 ...