[英]C 2 dimension array
我的代碼和結果:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int array[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}, i;
printf("array address:\n");
for(i=0;i<=2;i++){
printf("array[%d]=%p, address of array[%d]=%p, deference *array[%d]=%d\n",
i, array[i], i, &array[i], i, *array[i]);
printf("*(array+%d)=%2p, value of array+i=%p \n\n",
i, *(array+i), array+i);
}
system("PAUSE");
return 0;
}
結果
array address:
array[0]=000000af1bfffc70, address of array[0]=000000af1bfffc70, dereference *array[0]=1
*(array+0)=af1bfffc70, value of array+i=000000af1bfffc70
array[1]=000000af1bfffc80, address of array[1]=000000af1bfffc80, dereference *array[1]=5
*(array+1)=af1bfffc80, value of array+i=000000af1bfffc80
array[2]=000000af1bfffc90, address of array[2]=000000af1bfffc90, dereference *array[2]=9
*(array+2)=af1bfffc90, value of array+i=000000af1bfffc90
我的問題是:
為什么 array[i] 和 &array[i] 得到相同的輸出 000000af1bfffc70 和 *array[i]=1/5/9? 據我所知,array[i] 存儲了 i-row 數組的地址(地址為 1/5/ 9?),而&array[i]好像是array[i]的內存地址,同樣的輸出,是說開始地址000000af1bfffc70存儲000000af1bfffc70? 但是 000000af1bfffc70 是值 1/5/9 的地址嗎?
還有*(array+i),array+i 一樣嗎? af1bfffc70 與 000000af1bfffc70
請參閱https://open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 6.5.3.2 地址和間接運算符
(對於 &)如果操作數是一元 * 運算符的結果,則該運算符和 & 運算符都不會被計算,結果就好像兩者都被省略了,除了對運算符的約束仍然適用並且結果不是左值。
當&
作用於像array[1]
這樣指向值為 5 的地址的指針時,它不會改變。 所以&array[i]
array[i]
(對於 *)如果操作數的類型為“類型指針”,則結果的類型為“類型”。
這就是為什么*(array+i)
與array+i
相同的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.