我有以下代码:
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int age;
} data;
int storage (data **str) {
*str = malloc(4 * sizeof(**str));
(*str)[0].age = 12;
return 0;
}
int main() {
data *variable = NULL;
storage(&variable);
return 0;
}
这段话来源于一个网站。我认为自己对基本的指向指针的概念有误解,因为在这段代码中,我们有一个指向结构体的指针variable,并将其传递给了希望接受结构体指针的指向指针参数的函数storage。在内存被分配后,我不理解这个赋值操作。
(*str)[0].age = 12
这个赋值好像是将str
分配为(*)[]
类型。我不理解这个赋值是如何工作的,就好像str
现在是一个指向结构体数组的指针?
&
运算符的作用吗? - EOFa[b]
等同于*(a+b)
时,我的意思是等同。你交换这两个表达式的“方向”是没有关系的。因此,你认为只有当a
是一个数组时才能使用a[b]
的信念是错误的。事实上,在a[b]
被评估时,a
不再被视为数组,而是作为指针处理。 - EOFa
是空指针,则a + 0
会导致未定义的行为。@EOF - M.M6.5表达式6
中提到:“访问存储值的对象的有效类型是对象的声明类型(如果有)。87)分配的对象没有声明类型。” 那么为什么你会说malloc()
分配了一个数组? - EOF