网站大量收购闲置独家精品文档,联系QQ:2885784924

2第二讲 指针.doc

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2第二讲 指针

第二讲 指针 1.指针的基本概念:指针≡地址; 2.指针常量: 某已知变量的地址,或数组名等,:int a,b[5];此时a和b就是指针常量(固定值)。 3.指针变量:如int a,*p=a; char s[9],*q=s; 赋值:必须赋地址值,如int a,*p; p=a; 如p=2001;是错误的。 4.间接访问:*p=5;等同于a=5; 5.指针作为函数的参数,传递的是实参变量的地址, 如:void func(int *p) 调用时用某变量的地址常量,或指向该变量的指针作为实参,如主调函数中有定义int a,*q;q=a;则可用a或q作为实参进行调用,即func(a);或func(q); 都是将变量a的地址传递给形参指针p,使指针p指向变量a。函数中使用*p就是对a的间接访问,就可以改变a的值,或者将结果放入a中。但形参变量本身改变,反过来不会影响实参指针值。 6.指针与一维数组:int a[10],*p=a;则a代表数组首地址,是指针常量, 元素的表示方法:a[i]、*(a+i)、 p[i]、*(p+i) 元素地址:a[i]、a+i、 p[i]、p+i 区别:a是指针常量,值不能变,而p是指针变量,可进行增减运算;所以常通过p的增减运算来快速访问数组a,如: while(pa+5) scanf(“%d”,p++); 或while(pa+5) {(*p)++; printf(“%d,”,*p++);} 理解(*p)++、*p++、 *(p++)、p++的含义。 执行p++后指针拨动的单元数(由元素类型决定) 7.一维数组作为函数形参,实际上就是一个指针变量,如:func(int a[],int n); 等同于func(int *a,int n); 函数声明的几种变通形式。 所以指针a在函数中值可以改变,如*a++,不同于函数内定义的数组如:int b[5];这里b是指针常量。 8.指针与字符串:char *p,s[50]=“fdjfjdfj”; p=s; 可用p间接访问字符串,如指针法:for( ;*p!=‘\0’;p++) 或下标法:for(i=0;p[i]!=‘\0’;i++) 9.指针形参在函数间传递字符串:void copy(char *s1,char *s2) { while(*s1++=*s2++); } 调用时用字符数组名或指向某字符串的指针做实参, 如:char *p=“sdgygkh”; char ss[50]; func(ss,p) ; 函数调用的灵活形式:func(ss+2,p)或func(ss,p+2) 注意:输入字符串常用gets函数,但参数应是字符数组名,或已指向某字符数组的指针,如:char s[50],*p; gets(s);是正确的,而gets(p)是错误的,因为p没被赋地址值,无任何指向。改正:p=s; gets(p); 10.数组指针与多维数组:int a[3][4]; int (*p)[4]; p=a; p指向a的一整行,此时*p就代表a[0];如果执行p++,则p指向下一行,即*p代表a[1],p跳过单元数为2*4=8个字节。 引用元素的两种形式:p[i][j]或(*p)[j] 几个等价关系式:由x[i]等价于*(x+i)和x[i]等价于x+i得出: a[i][j]等价(*(a+i))[j]等价*(a[i]+j)等价*(*(a+i)+j) a[i][j]等价*(a+i)+ j等价a[i]+j 指针形参在函数间传递多维数组:int func(int (*b)[4],int n); 等价于int func(int b[][4],int n); 调用时用二维数组名做实参,如:func(a,3); 11.指针数组:char *s[3];表示数组s有3个元素,每一个元素都是一个指针变量,都可以指向一个字符串。 赋初值:char *s[3]={“sdgg”,”ww”,”q”};或单独赋值:s[0]=“sdgg”;s[1]=“ww”;s[2]=“q”; 用于指向多个字符串。 也可用字符数组存储多个字符串,只是占用内存空间大。 11.指向指针的指针:二级指针,char **p; 用于访问指针数组,或在函数间传递指针数组,通常就是传递多个字符串。 12.char *s[3]={“sdgg”,”ww”,”q”};char **p; p=s; p指向数组s的首地址,此时*p代表s[0],即指向第0个字符串,*p和s[0]都是第0个字符串的首地址, 可用gets(*p)或gets(p[i])来输入字符串,用puts(*p) 或puts(p[i])来输出字符串。 在函数间传递多个字符串的参数形式:func(char **s,int n)或fu

文档评论(0)

mydoc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档