1

&iiif iis arrayの違いを確認するコードを試しました。私の仮定は、それが配列の開始アドレスを表していることであり、同様iに印刷するとどうなるかわかりませんでした。とが配列の開始アドレスだったので&i、結果は (私にとって) 驚くべきものでした。i&i

#include<stdio.h>

int main()
{
    char str[25] = "IndiaBIX";

    int i[] = {1,2,3,4};

    printf("%i\n", &i);
    printf("%i\n", i);
    return 0;
}

結果は次のようになります。

2686692  
2686692

これは同じアドレスです。

しかし、int へのポインターを使用する場合:

#include<stdio.h>
#include <stdlib.h>

int main()
{
    int *j = (int *) malloc(sizeof(int));
    *j = 12;

    printf("%i %i %i\n", *j,j,&j);
    return 0;
}

結果は次のようになります。

12
5582744
2686748

ここで、1 番目は が指すメモリ領域の値j、2 番目は が指すメモリ領域のアドレスj、3 番目はポインタ自体のメモリ アドレスであると仮定します。と を出力するiと、がポインタのメモリ アドレスを意味しないのは&iなぜですか?&ii

4

2 に答える 2

4
int i[] = {1,2,3,4};

違いは、それらの型でiあり、整数配列の型を&i持ち、整数配列のポインターの型を持ちます。

于 2013-07-29T12:39:02.557 に答える
2

はい、 i と &i の両方で同じ答えが出力されますが、まったく同じではありません。

-> i は、i という名前の配列の最初の要素のアドレスを表します。
-> &i は配列全体のアドレスを表します (両方の値は同じですが、型は異なります)

詳細については、この [リンク] http://publications.gbdirect.co.uk/c_book/chapter5/arrays_and_address_of.htmlを参照してください。

                    int ar[10];
                    ip = ar;                /* address of first element */
                    ip = &ar[0];            /* address of first element */
                    ar10i = &ar;            /* address of whole array */
于 2013-07-29T13:55:26.630 に答える