首页 技术 正文
技术 2022年11月14日
0 收藏 555 点赞 2,580 浏览 1342 个字

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 

 

总结: 

将结构体变量作为函数參数,是将实參值传递给形參,属于值传递。

将结构体全部參数传递给形參使用,但本身的值不会改变。

将指向结构体变量的指针作为实參进行传递时,是将结构体变量的地址传递给形參。属于地址传递,会改变实际结构体变量的成员值的。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,918
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,444
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,255
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,069
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,701
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,741