资讯详情

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,%c\n",bc.a,bc.b); } main() { struct st bl; bl.a=3; bl.b="c"; fun(bl); printf("%d,%c\n",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,%c\n",bc.a,bc.b); } main() { struct st bl; bl.a=3; bl.b="c"; fun(&bl); printf("%d,%c\n",bl.a,bl.b); } 运行结果为:8,A 8,A 总结: 将结构体变量作为函数参数,是将实参值传递给形参,属于值传递。将结构体所有参数传递给形参使用,但本身的值不会改变。将指向结构体变量的指针作为实参进行传递时,是将结构体变量的地址传递给形参,属于地址传递,会改变实际结构体变量的成员值的。 -电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台