将指向结构的指针分配给变量
Posted
技术标签:
【中文标题】将指向结构的指针分配给变量【英文标题】:Assigning a pointer to a struct to a variable 【发布时间】:2013-01-21 03:03:17 【问题描述】:我在主程序中使用 make_employee 函数返回的指针时遇到问题。
// 我在一个单独的 .c 文件中有以下代码:
struct Employee;
struct Employee* make_employee(char* name, int birth_year, int start_year)
struct Employee* new = (struct Employee*)malloc(sizeof(struct Employee));
strcpy(new->name, name);
new->birth_year = birth_year;
new->start_year = start_year;
return new;
//In the main program:
int main()
char test_name[] = "Fred";
int test_birth = 1989;
int test_start = 2007;
Employee Fred;
make_employee(test_name, test_birth, test_start) = &Fred; <-- throws invalid lvalue error
return 0
【问题讨论】:
该赋值语句的左侧是.... 不是左值。还是错误消息中没有明确说明。 【参考方案1】:我认为你需要检查你的 make_employee 函数。我这么说的原因是在您发布的代码中,您使用以下行
struct Employee* new = (struct Employee*)malloc(sizeof(struct Employee));
new 是 C++ 中的关键字,如果您使用过 C++ 编译器,应该会立即引发编译错误。使用关键字作为变量名是不好的。
还要检查函数的返回值。
假设你已经正确声明了你的结构,这应该可以正常工作
struct Employee* make_employee(char* name, int birth_year, int start_year)
struct Employee *ptr = (struct Employee*)malloc(sizeof(struct Employee));
strcpy(ptr->name, name);
ptr->birth_year = birth_year;
ptr->start_year = start_year;
return ptr;
//In the main program:
int main()
char test_name[] = "Fred";
int test_birth = 1989;
int test_start = 2007;
Employee *Fred = make_employee(test_name, test_birth, test_start) ;
printf("Printing the data contents");
printf("\n Name : %s",Fred->name);
printf("\n Birth : %d",Fred->birth_year);
printf("\n Start :%d",Fred->start_year);
free(Fred);
return 0;
【讨论】:
【参考方案2】:您不能将某些内容分配给非左值。因此名称(左值,左侧值,可以出现在赋值表达式的left 侧)。
这是你想要做的吗??
int main()
char test_name[] = "Fred";
int test_birth = 1989;
int test_start = 2007;
struct Employee *fred = make_employee(test_name, test_birth, test_start)
// use fred....
free(fred);
return 0
注意:不要在 C 中强制转换 malloc()
。确保 stdlib.h
包含在您的源文件中,如果您忘记这样做,编译器会警告您。如果您收到警告说“隐式声明malloc
返回int
”等,这意味着您忘记包含stdlib.h
,您应该这样做。
【讨论】:
是的,这就是我想要做的。我在这一行收到警告(从不兼容的指针类型初始化):struct Employee *fred = make_employee(test_name, test_birth, test_start); 尝试struct Employee* make_employee(const char* name, int birth_year, int start_year)
进行函数声明。此外,请确保它是原型或在同一源文件中声明 above main()
。以上是关于将指向结构的指针分配给变量的主要内容,如果未能解决你的问题,请参考以下文章