预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共115页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第十章指针指针数据类型 (1)指针与地址的概念,地址运算符& (2)指针变量的定义,初始化,指针的运算 (3)指针与数组,指针与结构,指针数组,指针与函数,多级指针 (4)存储区动态分配和释放的函数的应用 (5)指针作为函数参数的应用引入指针的作用10-1地址和指针的概念直接访问与间接访问指针:一个变量的地址称为该变量的指针 指针变量:一个变量专门用来存放另一个变量的地址,则称它为指针变量 指针变量指向某变量:某变量的地址赋给 某指针变量10.2变量的指针和指向变量的指针变量10.2.1指针变量的定义指针与目标变量联系在一起,不能自由地如同汇编那样赋予内存地址,而只能赋予一个变量(包括数组)的存储地址,即目标变量的地址。 初始化格式: 数据类型*指针名=&变量名(或一维数组名,或NULL); (NULL在stdio.h,alloc.h等头文件中定义为0或0l) 赋值号右边的变量或数组的数据类型必须与指针数据类型一致,否则编译时会出现警告;初始化为NULL表示"空",即不指向任何目标.如 inta;int*pa=&a;float*pf=NULL;赋值格式: 指针名=&变量名(或一维数组名,或NULL); 或: 指针名1=指针名2;(注意指针名前不能再带有‘*’号) 如inta,*pa,*pb,*pa1,b[5]; pa=&a,pa1=pa,pb=b; 指针在未被初始化或赋值之前,其指向不定,俗称"野指针",其指向不定,因此不能访问"野指针"的目标,否则可能产生灾难性的后果. 10.2.2指针变量的引用inti,j; int*point1,*point2; 使指针变量指向另一个变量:赋值语句 point1=&i; point2=&j; 给指针变量所指向的变量赋值: *point1=3;(i=3;) *point2=4;(j=4;)main() {inta,b; int*point_1,*point_2; a=100;b=10; point_1=&a; point_2=&b; printf(“%d%d”,a,b); printf(“%d%d”,*point_1,*point_2); }对*和&运算符的几点说明如:point_1=&a; &*point_1:*point_1就是a,取地址运算后就得到a的地址,就是point_1。 *&a:&a就是a的地址,也就是point_1,再进行间接访问,就是变量a。 (*point_1)++:a++ *point_1++:由于++与*同优先级,自右至左结合,相当于*(point_1++),又由于++在后是“后加”,故先对point_1进行*运算,得到变量a的值,再将指针变量point_1加1,point_1不指向a了。 对比*++point_1,先指针变量point_1加1,再取其中的值。main() {int*p1,*p2,*p,a,b; scanf(“%d%d”,&a,&b); p1=&a;p2=&b; if(a<b) {p=p1;p1=p2;p2=p;} printf(“a=%d,b=%d\n”,a,b); printf(“max=%d,min=%d\n”,*p1,*p2); } 输入59<CR>输出a=5,b=5max=9,min=5510.2.3指针变量作为函数参数swap(int*p1,int*p2) {inttemp; temp=*p1; *p1=*p2; *p2=temp; } main() {inta,b; int*point_1,*point_2; scanf("%d,%d",&a,&b); point_1=&a; point_2=&b; if(a<b) swap(point_1,point_2); printf("\n%d,%d",a,b); }&b&aSwap(int*p1,int*p2); {int*p; p=p1;p1=p2;p2=p;} main() {inta,b;int*point_1,*point_2; scanf(“%d%d”,&a,&b); point_1=&a;point_2=&b; if(a<b)swap(point_1,point_2); printf(“\n%d,%d”,*point_1,*point_2); }(不能企图通过改变指针形参的值而使指针实参的值改变)&b&a如果想通过函数调用得到n个要改变的值,可以: 1)在主调函数中设置n个变量,用n个指针变量指向它们 2)将指针变量作为实参,将n个变量的地址作为函数的参数传给所调用的函数的形参 3)通过形参指针变量,改变该n个变量的值 4)在主调函数中可以使用这些改变了值的变量例10.4输入a,b,c3个整数,按大小顺序输出10-3数组的指针和指向数组的指针变量10.3.1指向数组元素的指针1