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 中的第二个指针指向第一个指针指向的第一个元素

但是两个指针的类型不同

在此处输入图像描述

看到这张图片

来源:https ://www.eskimo.com/~scs/cclass/int/sx9b.html

于 2016-12-31T13:45:07.387 回答
0

这两个指针具有相同的地址但具有不同的类型。

ptr是一个指向 5 个整数数组的指针。

*ptr是一个 5 个整数的数组。sizeof但是,当在除or之外的任何上下文中使用“T 数组”类型的表达式时&,它会自动转换为“指向 T”类型的表达式,指向数组的第一个元素。在这种情况下,它变成了一个指向 int 的指针。

显然,数组从与其第一个元素相同的地址开始。

于 2016-12-31T08:15:46.123 回答