C语言-结构体传值和传址

Python09

C语言-结构体传值和传址,第1张

①理论

结构体传值,

形参(值)不改变实参(值),

将结构体变量的值作为实参传递。

结构体传址,

形参(指针)改变实参(地址)所指成员的结构体值,

将结构体变量的地址作为实参传递。

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'}//加上这一句就变了