使用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中的指针初始化结构的构造函数值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

结构体内结构体指针是,在函数中对结构体指针进行操作值会发生变化?

C-函数指针,指针函数,构造体之结构体

如何使用结构构造函数初始化结构内的指针数组?

如何在构造函数中初始化指向字符串的指针数组[重复]

指针初阶零基础搞定C语言——11

使类中的函数指针依赖于初始化值