C程序第8章.docx
- 文档编号:5930513
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:4
- 大小:15.78KB
C程序第8章.docx
《C程序第8章.docx》由会员分享,可在线阅读,更多相关《C程序第8章.docx(4页珍藏版)》请在冰豆网上搜索。
C程序第8章
第8章地址和指针
1、变量的地址
举例:
inta;
inta;的功能是定义一个整型变量a,变量a的房子大小是4个字节大小,变量a的房子里可以住一个整数。
a房子形如以下所示:
001
002
003
004
总结:
变量的地址是指该变量所占存储单元的第一个字节的地址。
也就是整个房子的地址是第一个房间的房间号。
所以变量a的地址为001。
2、指针变量
举例:
inta;
int*p;
floatc;
⑴指针变量的房子也是4个字节大小,房子里住的不是实际的数据,而是地址。
不是所有的地址都可以住进去,只有同类型的简单变量的地址,才可以放到同类型的指针变量里。
⑵指针变量p中可以存放变量a的地址值,但是不可以存放变量c的地址值,因为只有同类型的简单变量的地址,才可以放到同类型的指针变量里。
⑶如何定义指针变量?
一般形式:
类型名*指针变量名
举例:
int*pi,*pj;
double*pd;
总结:
①指针变量定义中的*号必不可少。
②int*pi,*pj;中的int是指针变量pi和pj的基类型,它决定了只有int类型的简单变量的地址值才能放到指针变量pi和pj中。
3、二级指针、一级指针和简单变量的关系
举例:
int**p,*s,k=20;
s=&k;
p=&s;
总结:
⑴用两个*号定义的变量叫二级指针变量,用一个*号定义的变量叫一级指针变量。
⑵二级指针变量里存放同类型的一级指针变量的地址,一级指针变量里存放同类型的简单变量的地址。
⑶&是求地址运算符,它是单目运算符,操作数出现在&的右边。
如:
s=&k;功能是求出简单变量k的地址,并且把k的地址放到指针变量s的房子里。
4、指针移动和基类型的关系
举例:
int*p,a,b;
p=&a;
a
b
P→
请问p+1后,指针p是指向了变量a的第二个字节,还是指向了变量b的第一个字节?
答案是指向了变量b的第一个字节。
p+1不是指针移动一个字节,而是移动一个存储单元,一个存储单元多大,取决于指针变量在定义时所用的关键字,如本题中的int*p,因为指针变量p是用int定义的,所以一个存储单元的长度就是4个字节大小,故p+1才会指向变量b的第一个字节。
如果这样定义:
double*p;
那么p+1后,指针变量p移动几个字节?
5、给指针变量赋值(3个方法)
⑴通过求地址运算符(&)赋值
intk=1,*p;
p=&k;
⑵通过指针变量赋值
intk=1,*p,*q;
p=&k;
q=p;
程序段的功能是:
把k的地址赋给指针变量p,然后再通过指针变量p把k的地址赋给指针变量q,最终结果是让p和q都指向了变量k。
⑶通过标准函数赋值(详见13章)
6、&和*的区别
⑴&:
求地址运算符,后跟一个变量,功能是求出改变量的地址值。
如:
&a,但是&后不能跟表达式和常量,如:
&2、&(k+1)都是不合法的,也就是说,&后只能跟一个变量。
⑵*:
间址运算符,后跟一个指针变量,目的是引用该指针所指向的房子。
举例:
int*p,i=10,j;
p=&i;
j=*p;
j=*(&i);
分析:
1j=*p;等价于j=i;
2j=*(&i);等价于j=i;因为&和*是互逆操作,同时出现相互抵消。
3切记:
&后只能跟简单变量名,而*后只能跟指针变量名。
例8.1
用指针指向两个变量,通过指针运算选出值小的那个数。
#include
main()
{inta,b,min,*pa,*pb,*pmin;
pa=&a;
pb=&b;
pmin=&min;
scanf(“%d%d”,pa,pb);
printf(“a=%db=%d\n”,a,b);
*pmin=*pa;
if(*pa>*pb)
*pmin=*pb;
printf(“min=%d\n”,min);
}
解析:
⑴pa=&a;功能是把变量a的地址放到指针变量pa中,也就是让指针pa指向了变量a。
⑵*pmin=*pa;等价于min=a;*pa>*pb等价于a>b,*pmin=*pb;等价于min=b。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)