-5

配列arr[]を定義し、それへのポインターを定義すると、次のようになります。

int *p=arr;

arr(アドレスに関して)の値が0x1234. の値はどうなりますpか? それは同じでしょうか?

4

7 に答える 7

3

はい。値は同じです。これを確認するには、試してみてください

printf("arr=%p p=%p\n", arr, p);
于 2014-08-19T07:16:25.887 に答える
0

「の値arr」はアドレスではありません。arrは配列型の変数であり、その「値」は配列、つまり一連のint要素です。「値」は、型のコンテキストでのみ意味があります。

配列型の式 (例: arr) は、ポインター型が必要なコンテキストで、ポインター型の右辺値式 (値は配列の最初の要素のアドレス) に暗黙的に変換できます。int *p=arr;はそのような文脈です。

于 2014-08-19T21:30:03.753 に答える
0

p の値は同じになります。あなたが言ったように arr の値が0x1234であると仮定すると、ポインター p は同じ値を取ります.これは、ポインター p には arr 配列のアドレスを保持するのに十分なスペースがあるためです...

于 2014-08-19T09:25:43.930 に答える
0
int arr[] = {1, 2, 3, 4, 5, 6, 7};
int *p = arr;

arrとの値はp同じです。

しかし、値は変数の一部にすぎません。変数は、値と型で構成されます。arrとの種類pが異なります。

comp.lang.c FAQのセクション 6 をお読みください。

于 2014-08-19T09:28:40.597 に答える
0

の値は の値pと同じになりますarr

理由: 配列の名前はベース アドレスを表し、それを pointer に割り当てていますp

于 2014-08-19T07:21:27.377 に答える
-2

配列名は、その最初の要素へのポインターです。例えば:

int a[5];

それから、

a

要素 a[0] を指す int * です。arr の値が

0x1234

p の値は同じになります。ただし、p を使用した配列へのアクセスには注意が必要です (配列の範囲を考慮する必要があります)。

于 2014-08-19T07:32:52.450 に答える