×
嵌入式 > 技术百科 > 详情

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

发布时间:2020-06-16 发布时间:
|

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

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
联发科高端芯片系列出新品Helio P10 中文名[曦力"