资源描述:
《最全的c语言指针详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章指针6.1指针定义与使用6.2指针与函数6.3指针与数组6.4指针与字符串6.5指针数组与多级指针6.6指针与动态内存分配6.7指针的深层应用6.1指针的引出一.地址与指针1.地址与取地址运算C程序中的变量在内存中占有一个可标识的存储区,每一个存储区是由若干个字节组成,每一个字节都有自己的地址,而一个存储区的地址是指该存储区中第一个字节的地址C语言允许在程序中使用变量的地址(通过地址运算符&可得到)如:floatx;变量x的地址----&xinta[10];数组变量a的地址----数组名a2.指针与指针变量(1)变量的访问
2、方式①直接访问:通过变量名或地址访问变量的存储区例:scanf(“%d”,&x);x=sqrt(x);printf(“%d”,x);②间接访问:将一个变量的地址存放在另一个变量中.如将变量x的地址存放在变量p中,访问x时先找到p,再由p中存放的地址找到xpx201210101010(2)指针:一个变量的指针就是该变量的地址(指针就是地址)(3)指针变量:存放变量地址的变量,它用来指向另一个变量二、指针变量的定义1.格式:数据类型*指针变量名;例int*p1;char*p2;2.说明:(1)在变量定义时,*号表示该变量是指针变量(
3、注意:指针变量是p1,p2,不是*p1,*p2)(2)定义指针变量后,系统为其分配存储空间,用以存放其他变量的地址,但在对指针变量赋值前,它并没有确定的值,也不指向一个确定的变量例:intx,*p;x=5;px2012101051234注:指针变量p的值是随机值,此时p和x并无关联(3)使指针变量指向一个确定的变量必须进行赋值intx,*p;x=5;p=&x;px2012101051010三、指针变量的引用1.指针运算符*(1)p与*p不同,p是指针变量,p的值是p所指向的变量的地址*p是p所指向的变量,*p的值是p所指向的变量
4、的值*p的值为5(*p表示x),而p的值为1010(2)引用指针变量时的*与定义指针变量时的*不同定义变量时的*只是表示其后的变量是指针变量inta,*p;p=&a;scanf(“%d”,p);printf(“%d”,*p);*p=12;printf(“%d”,*p);pa201210105101012让p指向a对a重新赋值等价于a=12即&a2.&与*p=&a;*&a*(&a)*pa&*p&(*p)&a2abcd53.*与++,--inta=2,b=5,c,d,*p;p的值为a的地址,*p的值为2p的值不变,
5、*p的值为3(2)c=*p++;c=*(p++);{c=*p;p++;}执行后c的值为3,*p的值为5(3)d=*++p;d=*(++p);{++p;d=*p;}执行后d的值为3,*p的值为3p201210101010(1)p=&a;(*p)++;(等价于a++;)10123310143例6.2#includevoidmain(){int*p1,*p2,*p,a,b;scanf(“%d%d”,&a,&b);p1=&a;p2=&b;if(a6、=%d”,a,b);printf(“max=%d,min=%d”,*p1,*p2);}abp1p2p&a&b&a&b&a59输出结果:a=5,b=9max=9,min=5一、指针变量作函数参数例:2个数按大小顺序输出#includevoidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}voidmain(){inta,b;scanf(“%d%d”,&a,&b);if(a7、说明:该程序不能实现a和b的交换因为实参a,b对形参x,y是“值传递”,x和y的变化不影响a和b所以输出为:a=5,b=99mainswap559956.2指针与函数例6.3①#includevoidswap1(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voidmain(){inta,b,*pt1,*pt2;scanf(“%d%d”,&a,&b);pt1=&a;pt2=&b;if(a8、n”,a,b);}abp1p2temp&b&apt1pt25说明:这种方法是交换p1和p2所指向的变量的值,即交换main函数中a和b的值所以输出为:a=9,b=5mainswap159&a&b95例6.3②#includevoidswap2(