使用c中的指针初始化结构的构造函数值[重复]
Posted
技术标签:
【中文标题】使用c中的指针初始化结构的构造函数值[重复]【英文标题】:initialise constructor values of structure using pointer in c [duplicate] 【发布时间】:2020-03-12 22:48:11 【问题描述】:#include <ctype.h>
#include <stdlib.h>
#include <string.h>
struct Person
char name[50];
int year_of_birth;
char sex[7];
char father[50];
char mother[50];
char significant_other[50];
char children[50];
;
struct Person* person_constructor(char *name, int year_of_birth, char *sex);
int main()
struct Person* p1 = person_constructor("Abbas", 1970, "male");
struct Person* person_constructor(char *name, int year_of_birth, char *sex)
struct Person *p;
printf("%s",*name);
printf("%s",*sex);
printf("%d",&year_of_birth);
// how to initalise these here and return name, age and sex everytime , can you tell me in print function
我想做: Person* person_constructor(char *name, int year_of_birth, char *sex); 具有给定参数的人并将其返回。 同时分配内存。
【问题讨论】:
@TanveerBadar 不,它只是内存相关,我需要知道指针和结构如何完成 【参考方案1】:在下面的示例代码中,您可以找到问题的可能解决方案之一。 在 C 语言中不可能返回一个以上的变量,但您可以返回指向构造结构对象的指针并使用符号 stuct_ptr->struct_member 访问结构成员。
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
struct Person
char name[50];
int year_of_birth;
char sex[7];
char father[50];
char mother[50];
char significant_other[50];
char children[50];
;
struct Person* person_constructor(char *name, int year_of_birth, char *sex);
int main()
struct Person* p1 = person_constructor("Abbas", 1970, "male");
/* it is not possible to return more variables in C */
/* you can use pointer to access members from constructed structure: */
printf("print from main:\n %s %d %s \n", p1->name, p1->year_of_birth, p1->sex);
if( p1 != NULL) free(p1); /* do not forget do deallocate something taht is allocated */
return 0;
struct Person* person_constructor(char *name, int year_of_birth, char *sex)
struct Person *p = calloc(1, sizeof(struct Person));
if( p == NULL ) return p; /* memory alocation failed! */
strcpy(p->name, name);
p->year_of_birth = year_of_birth;
strcpy(p->sex, sex);
printf("print from constructor:\n");
printf("%s ",p->name);
printf("%s ",p->sex);
printf("%d \n",p->year_of_birth);
return p;
【讨论】:
建议在calloc中使用变量名:struct Person *p = calloc(1, sizeof(*p)) ;
减少其中一个类型被修改时不匹配的风险。
此代码在这些 printf 中仍然没有打印任何内容
#tested on Ubuntu 18.04 #compile the code with: $ cc person.c -o person #execute with command: $ ./person #result 应该显示: print from constructor: Abbas male 1970 print from主力:阿巴斯 1970 男
@risbo 感谢您的解决方案以上是关于使用c中的指针初始化结构的构造函数值[重复]的主要内容,如果未能解决你的问题,请参考以下文章