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 ...