首页 > 解决方案 > 使用c中的指针初始化结构的构造函数值

问题描述

#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); 具有给定参数的人并将其返回。还要分配内存。

标签: cpointersstructure

解决方案


在下面的示例代码中,您可以找到问题的可能解决方案之一。在 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;
}

推荐阅读