2
#include<stdio.h>

int main(void)
{
   int arr[5]={1,2,3,4,5};
   int (*ptr)[5]=&arr;

   printf("ptr=%p\n",ptr);    i am not getting the diff btw both statements
   printf("*ptr=%p\n",*ptr);

   return 0;
}

output:- 
ptr=0xbf8f8178
*ptr=0xbf8f8178

配列へのポインターを逆参照すると、配列名が取得され、配列名はベースアドレスを示し、両方のステートメントの違いは何ですか

4

2 に答える 2

0

printf の最初のポインターはポインターへのポインターです

printf の 2 番目のポインターは、最初のポインターが指す最初の要素を指しています。

しかし、2 つのポインタの型は異なります

ここに画像の説明を入力

この画像を見る

ソース: https://www.eskimo.com/~scs/cclass/int/sx9b.html

于 2016-12-31T13:45:07.387 に答える
0

2 つのポインターのアドレスは同じですが、型が異なります。

ptr5 つの int の配列へのポインタです。

*ptr5 つの int の配列です。ただし、「T の配列」型の式がsizeofor以外のコンテキストで使用さ&れると、配列の最初の要素を指す「T へのポインター」型の式に自動的に変換されます。この場合、int へのポインタになります。

明らかに、配列は最初の要素と同じアドレスから始まります。

于 2016-12-31T08:15:46.123 に答える