C语言_ch08_6_指针数组与多重指针 动态内存分配.pptVIP

C语言_ch08_6_指针数组与多重指针 动态内存分配.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 与指针相关的编程规则 减少出错的根本是彻底理解指针。 与指针相关的编程规则 1) 未使用的指针初始化为NULL 。 2) 在给指针分配空间前、分配后均应作判断。 3) 指针所指向的内容删除后也要清除指针本身。 * 遵循这些规则可以有效地减少指针出错,我们来看下面的例子: #include stdio.h #include stdlib.h int main(void) { char *str = (char *) malloc(100); strcpy(str, hello); free(str); if(str != NULL) { strcpy(str, world); printf(str); } } 请问运行Test函数可能会有什么样的结果? * * 篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str != NULL)语句不起作用。 如果我们牢记规则3,在free(str)后增加语句: str = NULL; 那么,就可以防止这样的错误发生。 习题 下面的标识符是什么类型? float (**def)[10]; def是个二级指针,它指向一个数组指针,该数组指针指向一个长度为10的float数组。 double *(*gh)[10]; gh是一个指向一维数组的指针,数组元素是double*型。 double (*f[10])(); f是一个函数指针数组,数组元素都是指向函数的指针,函数类型是没有参数且返回 double的函数。 int* ((*b)[10]); 和int*(*b)[10]一样,b是一维数组的指针,数组元素类型为int*。 long (*fun)(int) fun是一个函数指针,指向一个有一个int形参并返回long的函数 习题 static int a[3][3]={1,3,5,7,9,11,13,15,17},y,x,*p=a[2][2]; for (x=0;x3;++x) y+=*(p-4*x); printf(“\n%d”, y); 27 习题 请用变量a给出下面的定义,你能做到吗? a)一个有10个指针的数组,该指针是指向一个整型数的 b)一个指向整型数的指针 c)一个指向指针的的指针,它指向的指针是指向一个整型数 d)一个有10个整型数的数组 e)一个整型数 f)一个指向有10个整型数数组的指针 g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数 h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 答案: a)int*a[10]; b)int*a; c)int**a; d)int a[10]; e)int a; f)int (*a)[10]; g)int (*a)(int); h)int (*a[10])(int); ANSI新标准增加了一种void指针类型, 即可定义一个指针变量, 但不指定它是指向哪一种类型数据的。 * * 本节内容 指针数组pointer array 多重指针int ** 带参的main 动态内存分配 void*的引用和赋值 野指针(悬挂指针) 与指针相关的编程规则 * * 指针数组 指针数组 指针组成的数组 例如:int *p[4] 由于[]比*优先级高, 因此p首先与[]结合,即p是数组, 4个元素分别为p[0]、 p[1]、 p[2]、 p[3]。 数组每个元素的类型是int *,即去掉标识符和[]后的部分。 * * 指针数组举例 例如, 图书馆有若干本书(图 a), 要求对这些书目进行排序和查询。 表示多个字符串的两种数据结构 二维字符数组,图b char names[5][150]; 字符指针数组,图c char *names[5]; #include stdio.h int main() { int i; char *arr[4] = {C,C++,Java,VBA}; for (i=0; i4; i++) printf(Address of String %d : %u\n,i+1,arr[i]); return 0; } V B A \0 J a v a \0 C + + \0 C \0 03C 043 042 041 040 03F 03E 03D 044 04B 04A 049 048 047 046 045 04F 04E 04D 04C 0x0042204C 000x0042203C * * arr char *arr[4] = {C,C++,Java,VBA}; C \0 C

文档评论(0)

peace0308 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档