для следующего кода
//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);
, поскольку не является адресом [3] просто самого себя?
например
a = указатель
3 = индекс 3 указателя
a [3] = структура с индексом 3
& a [3]= адрес структуры> адрес a, в соответствии со структурой a * a, указывает на структуру a, а так как [3] является указателем от a на 3-ю структуру, родительский объект третьей структуры сам по себе