C语言的指针和结构体.ppt
《C语言的指针和结构体.ppt》由会员分享,可在线阅读,更多相关《C语言的指针和结构体.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C 语言中的指针与语言中的指针与结构体结构体指针指针的概念的概念地址地址 内容内容 变量名变量名intx=20,y=1,z=155;int*p;p=&x;100020 x10021y1004155z20001000p2002 指针变量指针变量指针变量指针变量:存放地址的变量:存放地址的变量某个某个变量变量的地址的地址指向指向(内存单元内存单元)指针变量所指向的变量的类型指针变量所指向的变量的类型int*p;p是整型指针,指向整型变量是整型指针,指向整型变量float*fp;fp是浮点型指针,指向浮点型变量是浮点型指针,指向浮点型变量char*cp;cp是字符型指针,指向字符型变量是字符型指
2、针,指向字符型变量类型名类型名*指针变量名指针变量名指针声明符指针声明符指针变量的定义指针变量的定义取地址运算取地址运算(&)和间接访问运算和间接访问运算(*)*:间接访问运算符间接访问运算符,访问指针所指向的变量。,访问指针所指向的变量。*p:指针变量:指针变量p所所指向的指向的变量变量。a3&ap*p如果指针的值是某个变量的地址,通过指针就如果指针的值是某个变量的地址,通过指针就能能间接访问间接访问那个变量。那个变量。&:取地址运算符取地址运算符,给出变量的地址。,给出变量的地址。int*p,a=3;p=&a;把把a的地址赋给的地址赋给p,即,即p指向指向a/指针变量的类型和它所指向变量的
3、类型相同指针变量的类型和它所指向变量的类型相同a3&ap*p(1)当当p=&a后,后,*p与与a相同相同(2)int*p;定义定义指针变量指针变量p*p=10;指针指针p所指所指向向的变量的变量,即,即a,改变变量值,改变变量值(3)&*p与与&a相同,相同,是是地址地址*&a与与a相同,相同,是是变量变量(4)(*p)+等价于等价于a+将将p所指所指向向的变量值加的变量值加1*p+等价于等价于*(p+)/先取先取*p,然后,然后p自加自加,此时此时p不再指向不再指向a说明说明 inta=3,*p;p=&a;赋值运算赋值运算a3&ap1&ap2*p1*p2inta=3,*p1,*p2;p1=&
4、a;/把把a的地址赋给的地址赋给p1,即,即p1指向指向ap2=p1;/p2也指向也指向a/相同类型的指针才能相互赋值相同类型的指针才能相互赋值注意:注意:指针指针变量必须初始化。变量必须初始化。voidmain()inta=1,b=2,*p1,*p2,*pt;p1=&a;p2=&b;printf(a=%d,b=%d,*p1=%d,*p2=%dn,a,b,*p1,*p2);pt=p1;p1=p2;p2=pt;printf(“a=%d,b=%d,*p1=%d,*p2=%dn”,a,b,*p1,*p2);return0;p1b2&bp2*p2a1&a*p1ptb2&ap2*p1a1&bp1*p2p
5、t&aa=1;b=2;*p1=1,*p2=2a=1;b=2;*p1=2,*p2=1指针指针作为函数参数作为函数参数voidswap(int*px,int*py)intt;t=*px;*px=*py;*py=t;要通过函数调用来改变主调函数中某个变量的值:要通过函数调用来改变主调函数中某个变量的值:(1)在主调函数中,在主调函数中,将该变量的地址或者指向该变量的将该变量的地址或者指向该变量的指针作为实参指针作为实参(2)在被调函数中,在被调函数中,用指针类型形参接受该变量的地址用指针类型形参接受该变量的地址(3)在被调函数中,改变形参所指向变量的值在被调函数中,改变形参所指向变量的值abpxpy
6、1221/swap(&a,&b);数组和地址间的关系数组和地址间的关系int a100,*p;数组名代表一个地数组名代表一个地址,它的值是数址,它的值是数组首元素的地址组首元素的地址(基地址)(基地址)a+i是距数组是距数组a的的基地址的第基地址的第i个偏个偏移移3000a0地址地址 内容内容 数组元素数组元素3002a13198a99aiaa+1a+99a+i&ai*(a+i)sum=0;for(i=0;i 100;i+)sum=sum+ai ;*(a+i)下标运算符下标运算符的含义的含义任何由数组下标来实现的操作都能用指针来完成任何由数组下标来实现的操作都能用指针来完成inta100,*p
7、;p=a;或或p=&a0;pp+1p+99p+i3000a0地址地址 内容内容 数组元素数组元素3002a13198a99aiaa+1a+99a+i&ai aia+i*(a+i)p+i*(p+i)&pipip=a;sum=0;for(i=0;i100;i+)sum=sum+pi;等价等价等价等价*(p+i)sum=0;for(p=a;p”访问指针指向的结构成员。访问指针指向的结构成员。p-age=26;当当p=&friend1时,以下三条语句相同:时,以下三条语句相同:friend1.age=26;(*p).age=26;p-age=26;结构体指针作为函数参数结构体指针作为函数参数当当结结构
8、构指指针针作作为为函函数数的的参参数数时时,执执行行效效率率高高,可以完成比基本类型指针更为复杂的操作。可以完成比基本类型指针更为复杂的操作。例例:输输入入10个个学学生生的的学学号号、姓姓名名和和成成绩绩,输输出出学生的成绩等级和不及格人数。学生的成绩等级和不及格人数。每个学生的记录包括学号、姓名、成绩和等级每个学生的记录包括学号、姓名、成绩和等级要要求求定定义义和和调调用用函函数数set_grade根根据据学学生生成成绩绩设设置置等等级级,并统计不及格人数并统计不及格人数等级设置:等级设置:A:85100;B:7084;C:6069;D:059源程序源程序#defineN10structs
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 指针 结构
限制150内