簡體   English   中英

C 二維數組

[英]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

我的問題是:

  1. 為什么 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 的地址嗎?

  2. 還有*(array+i),array+i 一樣嗎? af1bfffc70 與 000000af1bfffc70

請參閱https://open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 6.5.3.2 地址和間接運算符

  1. (對於 &)如果操作數是一元 * 運算符的結果,則該運算符和 & 運算符都不會被計算,結果就好像兩者都被省略了,除了對運算符的約束仍然適用並且結果不是左值。

&作用於像array[1]這樣指向值為 5 的地址的指針時,它不會改變。 所以&array[i] array[i]

  1. (對於 *)如果操作數的類型為“類型指針”,則結果的類型為“類型”。

這就是為什么*(array+i)array+i相同的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM