C语言:结构体与结构体指针

来源:本站
导读:目前正在解读《C语言:结构体与结构体指针》的相关信息,《C语言:结构体与结构体指针》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言:结构体与结构体指针》的详细说明。
简介:将结构体变量作为函数参数,是将实参值传递给形参,属于值传递。将结构体所有参数传递给形参使用,但本身的值不会改变。将指向结构体变量的指针作为实参进行传递时,是将结构体变量的地址传递给形参,属于地址传递,会改变实际结构体变量的成员值的。

1、指向结构体的指针变量:

C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符“->”.

举例说明:

struct SunLL

{

int a;

int b;

int c;

};

struct SunLL * p; //定义结构体指针

struct SunLL A = {1,2,3}; //定义一个SunLL类型的变量A

int x; //定义一个变量x

p = &A ; //让p指向A

x = p->a; //等价于 x=(*p).a (*p)表示p指向的结构体变量

//这句话的意思就是取出p所指向的结构体中包含的数据项a赋值给x

//由于此时p指向A,因而 p->a == A.a,也就是1

2、指向结构体数组的指针变量:

指向结构体的指针变量也可以指向结构体数组及其元素。

如果程序如下:

struct SunLL *p,sun[3];

p = sun;

如果假定sun[0]的地址是1000,指针变量p指向结构体数组sun的首地址,由于size of(struct SunLL)的值是6,每个结构体元素占内存空间6个字节,因此p+1指向地址1006,p+2指向地址1012.

使用指针变量指向结构体变量或结构体数组时,应注意运算符的优先级,在c语言中"()" "[ ]" "->" "."四个优先级相同,具有最高的优先级,其次是”*“ ”++“ ”--“ ”&“四个相同优先级的运算符。如:++P->a的表达式等价于++(p->a)

(++p)->a先计算++p,p指向sun[1];

P++->a;则表达式等价于(p++)->a;

p->a++的表达式等价于(p->a)++;

3、结构体作为函数参数与结构体指针作为函数参数

举例1

struct st

{

int a;

char b;

};

fun(struct st bc)

{

bc.a+=5;

bc.b='A';

printf("%d,%cn",bc.a,bc.b);

}

main()

{

struct st bl;

bl.a=3;

bl.b="c";

fun(bl);

printf("%d,%cn",bl.a,bl.b);

}

运行结果为:8,A 3,c

举例2:

struct st

{

int a;

char b;

};

fun(struct st *bp)

{

bp->a+=5;

bp->b='A';

printf("%d,%cn",bc.a,bc.b);

}

main()

{

struct st bl;

bl.a=3;

bl.b="c";

fun(&bl);

printf("%d,%cn",bl.a,bl.b);

}

运行结果为:8,A 8,A

总结:

将结构体变量作为函数参数,是将实参值传递给形参,属于值传递。将结构体所有参数传递给形参使用,但本身的值不会改变。将指向结构体变量的指针作为实参进行传递时,是将结构体变量的地址传递给形参,属于地址传递,会改变实际结构体变量的成员值的。

提醒:《C语言:结构体与结构体指针》最后刷新时间 2024-03-14 01:02:10,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言:结构体与结构体指针》该内容的真实性请自行鉴别。