- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用注意 a与a[0]的含义不同,a表示地址,a[0]表示数组元素 p是指针变量,可以对其进行+、-、和赋值运算 如:p++; p=a; p=a[i]等等 数组名a表示一个地址常量,即一个常量指针,不能改变它的值 如:a++; a=p; a+=i; 是非法的 举例说明 若有以下定义和语句,且0=i10,则对数组元素的错误引用是: int a[ ]={1,2,3,4,5,6,7,8,9,0},*p,i; p=a; A、*(a+i) B、a[p-a] C、p+i D、*(a[i]) 若定义同上,对数组元素地址的正确表示是: (a+1) B. a+ + C. p D. p[i] 字符串的指针和字符串的指针变量 字符串的表现形式 字符数组 方式1:char str[ ]={‘c’,’h’,’i’,’n’,’a’}; 方式2:char str[ ]=“china”; 字符指针 char *strp=“china”; 说明:定义了一个字符指针变量strp,变量中存放的是字符串中第一个字符的地址 区别: 字符数组方式中,若str[ ]=“The string”;其中,每个数组元素都有相应的名字及数值,如str[0]=‘T’,str[1]=‘h’,……,str[10]=‘\0’ 字符指针方式中,若有 char *strp=“The string”; 则指针strp存放该字符串的首地址,字符串的每个元素没有具体的名字,但可以通过指针来进行引用,如*(strp+0),*(strp+1),……;但不能误认为字符串“The string”存放在指针strp中 字符指针作函数参数进行传递 与一般数组、指针相同,传递的是数组的首地址 例:下列程序的运行结果是 #include stdio.h #define MAX 10 void sub( ); main( ) { char s[MAX]=“ABCDEF”; sub(s); } void sub(char *a) { char *t; if (*a) { t=a; t++; sub(t); putchar(*a); } } sub(s); s[ ]=“ABCDEF” a=s; *a=‘A’,条件为真 t=a;t+ +;sub(t); putchar(*a); sub(t); *t=“BCDEF” a=t; *a=‘B’,条件为真 t=a;t+ +;sub(t); putchar(*a); …… t=‘\0’; sub(t); a=t; *a=‘\0’; 条件为假,返回到上一层,执行 putchar(*a); 打印字符‘F’ 执行putchar(*a) 执行putchar(*a) 二维数组与指针 例: int a[2][3]={1,2,3,4,5,6}; int *p; p=a; 出现问题:a 数组名是数组第一元素的地址,即a[0] 而a[0]是一个数组 修改:?p=a[0][0] ?int (*p)[3]; p=a; 在?情况下:a[i][j]等价与*(p+i*3+j) 在?情况下:a[i][j]等价与*(*(p+i)+j) 悬摆指针错误: 错例:int *p=3; 注:指针p是悬摆指针,没有分配内存空间 更正: int a,*p; p=a; *p=3; int *p; p=(int *)malloc(sizeof(int)); *p=3; 注:malloc函数:申请地址空间,返回一个void指针,没有任何结果信息,所以在前加上强制类型转换(int *),反悔一指向整型变量的指针 八、结构体和共用体 结构体 类型定义: struct student { int num; char name[20]; char sex; }; 结构体变量定义 struct student
原创力文档


文档评论(0)