在c语言中,结构体与函数传递
如果是结构体成员传递到函数实参,则和变量传递相同
如果是结构体变量传递给函数实参,会在内存中开辟同样大小的内存空间,并且实参内容改变时,对应实参内容不会改变。
当结构体指针变量作为实参传递时,将指针地址传递给实参。
示例代码如下
#include<stdio.h>
#include<string.h>
struct test
{
char name[30];
int age;
char sex;
int student_number;
} ;
void change_info(char name[30],struct test *q)
{
printf("修改%s的信息\n",name);
printf("修改为姓名 年龄 性别 学号:") ;
scanf("%s %d %c %d",q->name,&(q->age),&(q->sex),&(q->student_number));
}
int main()
{
struct test lisi,*p=&lisi;
strcpy(lisi.name,"lisi");
change_info(lisi.name,p);
printf("姓名:%s\t 年龄:%d\t 性别:%c\t 学号:%d\n",p->name,p->age,p->sex,p->student_number);
return 0;
}
在上面代码中分别定义了一个结构体和一个函数
在main代码块里
定义了一个结构体变量 lisi,并且把lisi的地址赋值给指针p
接着
strcpy(lisi.name,"lisi")
把字符串lisi赋值给结构体成员name里
执行change_info函数,这里把lisi.name的值作为实参传递给函数
函数执行第一条代码
打印修改谁的信息
接着把lisi的地址传递给实参,传递给函数,分别修改结构体变量lisi里面成员的内容