结构体传值,
形参(值)不改变实参(值),
将结构体变量的值作为实参传递。
结构体传址,
形参(指针)改变实参(地址)所指成员的结构体值,
将结构体变量的地址作为实参传递。
struct A t
A是结构体标识名,t是变量名,
t中包含若干成员。
~
②传值
#include<stdio.h>
#include<string.h>
/*结构体说明*/
struct A
{int a
char b[20]
double c}
/*函数说明*/
void f(struct A t)
/*主函数*/
void main()
{struct A a={1111,"Zenglaoshi",1111.0}
f(a)
printf("%d,%s,%6.1f\n",a.a,a.b,a.c)}
/*定义函数*/
void f(struct A t)
{t.a=2222
strcpy(t.b,"Zhangyida")
t.c=2222.0}
结果
是a,1111,"Zenglaoshi",1111.0
不是t,2222,"Zhangyida",2222.0
只是生成参数a的一个副本,
不会改变a的值。
~
③传址
#include<stdio.h>
#include<string.h>
/*结构体说明*/
struct A
{int a
char b[20]
double c}
/*函数说明*/
void f(struct A *p)
/*主函数*/
void main()
{struct A a={1111,"Zenglaoshi",1111.0}
f(&a)
printf("%d,%s,%6.1f\n",a.a,a.b,a.c)}
/*定义函数*/
void f(struct A *p)
{p->a=2222
strcpy(p->b,"Zhangyida")
p->c=2222.0}
结果
是*p,2222,"Zhangyida",2222.0
不是a,1111,"Zenglaoshi",1111.0
改变a的值。
1、值传递:不管怎么传,原来的实参的值都不会改变。地址传递,原来的实参的值可能被改变。
打个比方:
值传递就好象你告诉别人你的帐户里有多少钱 帐户里的钱不会改变。
地址传递就好象你告诉别人你的帐户密码 帐户里面的钱可以被改变。
2、例如:
#include<stdio.h>
point(char *pt)
main()
{char b[4]={'m','n','o','p'},*pt=b
point(pt)
printf("%c\n",*pt)
}
point(char *p)
{p+=3
*p='F'}//加上这一句就变了