[英]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 = a
和p = &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 = a
或p = &a[0]
都相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.