【发布时间】:2018-10-11 04:21:23
【问题描述】:
以下代码
//gcc 5.4.0
#include <stdio.h>
#include <string.h>
#include <assert.h>
struct a{
int a;
};
void change(struct a * a) {
a->a = 5;
}
int main(void)
{
struct a * a = malloc(4*sizeof(struct a));
a[3].a = 2;
assert(a[3].a == 2);
change(&a[3]);
assert(a[3].a == 5);
printf("Hello, world!\n");
return 0;
}
为什么change(&a[3]); 不传递change(&a); 或change(a); 本身的地址,因为a[3] 的地址不只是一个本身?
例如
a = 指针
3 = 指针的索引 3
a[3] = 索引 3 处的结构
&a[3] = 结构体的地址 > a 的地址,根据结构体 a * a,a 指向结构体 a,因为 a[3] 是从 a 指向第三个结构体的指针,即第三个结构是一个本身
【问题讨论】:
-
a == &a[0]。&a[3] == (a+3). -
&a[3]是指向“数组”a中第四个元素的指针。 -
埃加德。
a的含义太多了。 -
所以
&a[3]是数组a索引3处的结构地址? -
@aschepler aaaaaaaaaaa!
标签: c pointers memory-address