只是一个名为 person 的简单结构,在里面我需要存储姓名和年龄。我正在尝试为我的结构动态分配内存。
不使用指针:
#include <stdio.h>
#include <stdlib.h>
typedef struct person
{
char name[10];
int age;
} person;
int main(int argc, char *argv[])
{
person a = {"bob", 15}; // Here, we can input values "together", all at once
printf("name is %s, age is %i\n", a.name, a.age);
return 0;
}
到这里,就可以成功打印出:
name is bob, age is 15
使用指针:
int main(int argc, char *argv[])
{
person *a = (person *) malloc(sizeof(person));
*a = {"bob", 15}; // Here I tried to input the all values
printf("name is %s, age is %i\n", a->name, a->age);
free(a);
return 0;
}
它不会编译并返回错误:
expected expression before '{' token
好吧,如果我尝试一一输入值:
int main(int argc, char *argv[])
{
person *a = (person *) malloc(sizeof(person));
a->name = "bob";
a->age = 15;
printf("name is %s, age is %i\n", a->name, a->age);
free(a);
return 0;
}
可以成功打印出:
name is bob, age is 15
我期望由于指针指向分配给结构体 person 的内存,因此可以像普通结构体一样一起输入值。但正如你所看到的,它不能。然而,当值被一一输入时,它就起作用了。
我做错了什么吗?或者使用指针时,需要一一输入值?谢谢。
您可能需要一个结构体文字。并且不要投射来自
malloc
的返回。
int main(void)
{
person *a = malloc(sizeof(person));
*a = (person){"bob", 15}; // Here I tried to input the all values
printf("name is %s, age is %i\n", a->name, a->age);
free(a);
return 0;
}