将struct传递给函数C.

时间:2016-11-14 13:26:00

标签: c

首先,我是C编程的新手,我想知道如何通过函数传递struct

例如:

typedef struct
{
 char name[20];
}info;

void message()
{
 info n;

 printf("Enter your name : ");
 scanf("%s", &n.name);
}

我想将输入的名称传递给此函数,以便打印出名称。

void name()
{
printf("Good morning %s", ...);
}

3 个答案:

答案 0 :(得分:3)

是的,您只需按值传递结构即可。这将创建数据的副本:

void name(info inf)
{
   printf("Good morning %s", inf.name);
}

创建一个只有成员是数组的结构(就像你所做的那样)是一种“按值传递数组”的已知方法(通常不可能)。

对于大型结构,通常只传递一个指针:

void name(info *inf)
{
   printf("Good morning %s", inf->name);
}

但是调用者可以看到对指针目标的更改。

答案 1 :(得分:1)

创建将'info'(struct)作为参数的函数定义:

void name (info);

将函数定义为:

void name(info p) {
    printf("Good morning %s", p.name);
}

然后适当地调用该函数:

name(n);

答案 2 :(得分:0)

好吧,如果您只想打印名称,可以传入指向字符串本身的指针。

void name(char *str)
{
  printf("Good morning %s", str);
}

被称为name(n.name);

但是我们假设这是一个简化的例子,你真的想要访问函数内的整个结构。通常你会传入指向结构的指针。

void name(info *ptr)
{
  printf("Good morning %s", ptr->name);
}

被称为name(&n);

不是使用指针,而是可以按值传递整个结构,但这并不常见,因为它会生成整个结构的临时副本。

void name(info inf)
{
  printf("Good morning %s", inf.name);
}

被称为name(n);