int(* ptr)[4]的真正含义是什么,与* ptr有什么不同?

问题描述 投票:2回答:4
int (*p)[4] , *ptr;
int a[4] = {10,20,30,40};
printf("%p\n%p\n%p",&a,a,&a[0]);
p = &a ;
//p=a;        gives error

//ptr = &a;   gives error
 ptr = a;

输出:

0x7ffd69f14710
0x7ffd69f14710
0x7ffd69f14710

我试图了解a&a&a[0]返回什么以及它的起始变量的内存地址。那么,为什么在某些作业中我会出错?

我的意思是,如果p = &a = 0x7ff...有效,为什么p = a = 0x7ff..不起作用?

[如果可能,任何人都可以通过框图来了解该p和ptr实际指向的地方。或者他们只是指向相同。但是我肯定知道它们是不同的东西。

c arrays pointers memory-address
4个回答
0
投票

我试图了解a&a&a[0]是什么。

在C数组中衰减到指针。所有这些指针都引用数组的相同第一个元素。唯一的区别是类型。

[&a&a[0]具有数组元素的类型(在这种情况下为int)] >>

[&a是元素类型的数组类型(在这种情况下为4个整数的数组)。


0
投票

p是指向类型为int[4]的值的指针,即,指向每个4个整数的数组的指针。请注意,sizeof(*p)sizeof(int)的4倍。


0
投票

想象一下,指针是激光指针,具有不同的颜色(红色表示int,绿色表示指向数组的指针,...),并且变量是您可以指向使用正确的激光指针


0
投票

在C中,数组类型的表达式能够衰减到指向数组第一个元素的指针。

© www.soinside.com 2019 - 2024. All rights reserved.