ppt课件-c语言_ch08_6_指针数组与多重指针 动态内存分配.pptVIP

ppt课件-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文档。上传文档
查看更多
ppt课件-c语言_ch08_6_指针数组与多重指针 动态内存分配

本节内容 指针数组pointer array 多重指针int ** 带参的main 动态内存分配 void*的引用和赋值 野指针(悬挂指针) 与指针相关的编程规则 习题 下面的标识符是什么类型? float (**def)[10]; def是个二级指针,它指向一个一维数组的指针,数组元素是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); 习题 请用变量a给出下面的定义,你能做到吗? a)一个有10个指针的数组,该指针是指向一个整型数的(Anarrayof10pointerstointegers) b)一个指向整型数的指针(Apointertoaninteger) c)一个指向指针的的指针,它指向的指针是指向一个整型数(Apointertoapointertoaninteger) d)一个有10个整型数的数组(Anarrayof10integers) e)一个整型数(Aninteger) f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers) g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger) h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(Anarrayoftenpointerstofunctionsthattakeaninteger argumentandreturnaninteger) 答案是: a)int*a[10];//Anarrayof10pointerstointegers b)int*a;//Apointertoaninteger c)int**a;//Apointertoapointertoaninteger d)int a[10];//Anarrayof10integers e)int a;//Aninteger f)int(*a)[10];//Apointertoanarrayof10integers g)int(*a)(int); h)int(*a[10])(int); * * void的使用 规则一:如果函数没有返回值,那么应声明为void类型 规则二:如果函数无参数,那么应声明其参数为void 规则三:小心使用void指针类型 规则四:如果函数的参数可以是任意类型指针,那么应声明其参数为void * * * 关于野指针(悬挂指针) 悬挂指针:既不为空,也没有被设置为与另一个对象有链接关系的指针。 野指针是非常危险的,所以要杜绝野指针。参见《高质量C++/C编程指南》 -- 第7章 内存管理 (2) * * 野指针的成因主要有两种: (1)指针变量没有被初始化。 未被初始化的指针变的缺省值是随机的。所以,指针变量在定义的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如 char *p = NULL; char *str = (char *) malloc(100); (2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。 * * (3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下: class A { public: void Func(void){ cout Func of class A endl; } }; void Test(void) { A *p; { A a; p = a; // 注意 a 的生命期 } p-Func(); // p是野指针 } 函数Test在执行语句p-Func()时,对象a已经消失,而p是指向a的,所以p就成了野指针。但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关。 * * 与指针相关的编程规则 减少出错的根本是彻

文档评论(0)

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

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

1亿VIP精品文档

相关文档