我有一个关于语法和代码的简单问题。
我刚刚找到了一种在 C 中声明结构的方法,这与我迄今为止所看到的有点不同。
这是示例代码:
#include <stdio.h>
struct student {
int age;
int grade;
char* name;
};
int main () {
struct student s = { .name = "Max", .age = 15, .grade = 8 };
return 0;
}
将变量分配为 .var_name 效果很好,您可以按照您想要的任何顺序分配它。我喜欢这种方法,所以我开始尝试,但碰壁了。 如果我要声明:
struct student *s = { ->name = "Max", ->age = 15, ->grade = 8 };
这行不通。使用指针时是否有任何语法可以给出与上面的代码相同的结果?
谢谢!
最佳答案
一般来说,您不能“为指针赋值”。指针仅存储单个值,即已存在对象的地址。
如果你有一个指向现有结构变量的指针,你可以直接初始化它:
struct student s = { .name = "Max", .age = 15, .grade = 8 };
struct student *p = &s;
如果你想使用动态内存分配,事情会变得有点棘手:
struct student *p = malloc(sizeof *p);
if (!p) {
...
}
malloc
为您提供未初始化的内存,并且您不能对现有对象使用初始化语法。
但是您可以使用涉及复合文字的技巧(自 C99 起可用):
*p = (struct student){ .name = "Max", .age = 15, .grade = 8 };
这里我们使用复合文字创建一个新的未命名结构对象,然后将其内容复制到 *p
中。
可以使用相同的功能来消除第一个示例中的 s
:
struct student *p = &(struct student){ .name = "Max", .age = 15, .grade = 8 };
但在这个版本中p
仍然指向自动内存(就像局部变量)。
关于c - 为结构体指针赋值的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55981428/