繁体   English   中英

p = * a [0]和p =&a [0]有什么区别

[英]What is the difference between p = *a[0] and p=&a[0]

#define N 20
int a[2N], i, *p, sum;

p = a;


/* p=a is equivalent to p = *a[0];
• p is assigned 300.
• Pointer arithmetic provides an alternative to array indexing.
• p=a; is equivalent to p=&a[=]; (p is assigned 300)

在这里,我不明白p=*a[0]p=&a[0]是如何相同的? *a[0]引用存储地址中的元素。

点1

您知道吗, int a[2N]无效代码?

2N并不意味着2*N ,而是将该N视为无效的后缀 (至整数文字2 )。

感谢@LưuVĩnhPhúc先生的以下评论。

如果您想要类似int a[40] ,请编写int a [2*N]

点2

p=*a[0]p=&a[0]相同

不,他们不一样。 实际上,对于当前代码段, *a[0]无效的

FWIW, p = a; 并且p = &a[0]; 相同,因为数组名称表示基地址 ,即数组中第一个元素的地址。

p = ap = &a[0]的确相等。 在这种情况下,请将数组中p一个元素的地址分配给p (因为数组的名称=指向其第一个元素的指针)。 p=*a[0]p=&a[0]不同; *a[0]要求a是一个指针数组,并取消对其第一个成员的引用。

p = &a[0]的含义如下

例如 :

 int a[4];
                        a[0]  a[1]  a[2]  a[3]
            a --------> [   ][    ][    ][    ]

当量

 // Reference
 &a[0] = a;
 &a[1] = a+1; 
 ...
 &a[3] = a+3;

 // Value
 a[0]  = *a
 a[1]  = *(a+1)
 ..
 a[3]  = *(a+3)

在C编程数组中,数组名称始终指向数组的第一个元素。 在这里,数组的第一个元素的地址为&a[0] 同样, a表示指针所指向的地址,即基地址。 因此, &a[0]等于a ,因此p = ap = &a[0]都相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM