#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)
Run Code Online (Sandbox Code Playgroud)
在这里,我没有得到如何p=*a[0]
和p=&a[0]
相同?*a[0]
引用内存地址处的元素.
第1点
你的理解,这里int a[2N]
是无效的代码?
这2N
并不意味着2*N
,而是将N
其视为无效的后缀(对于整数文字2
).
感谢Mr @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];
是相同的,因为数组名称表示基址,即数组中第一个元素的地址.