2022年水滴石穿C语言之指针 .pdf
《2022年水滴石穿C语言之指针 .pdf》由会员分享,可在线阅读,更多相关《2022年水滴石穿C语言之指针 .pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、个人收集整理仅供参考学习水滴石穿C 语言之指针、数组和函数基本解释1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“ 可变 ” ,所以我们常用指针来操作动态内存。3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。问题:指针与数组听说 char a 与 char *a 是一致的,是不是这样呢?答案与分析:指针和数组存在着一些本质的区别。当然, 在某种情况下, 比如数组作为函数的参数进行传递
2、时, 由于该数组自动退化为同类型的指针,所以在函数内部,作为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是一种比较特殊的情况而已,在本质上, 两者是有区别的。请看以下的例子:char a = Hi, pig!; char *p = Hi, pig!; 上述两个变量的内存布局分别如下:数组 a 需要在内存中占用8 个字节的空间,这段内存区通过名字a 来标志。指针p 则需要 4 个字节的空间来存放地址,这4 个字节用名字p 来标志。其中存放的地址几乎可以指向任何地方,也可以哪里都不指,即空指针。目前这个p 指向某地连续的8 个字节,即字符串 “Hi, pig!”。另外,例如:对于a2
3、和 p2 ,二者都返回字符i ,但是编译器产生的执行代码却不一样。对于 a2 ,执行代码是从a 的位置开始, 向后移动 2 两个字节, 然后取出其中的字符。对于 p2 , 执行代码是从p 的位置取出一个地址,在其上加 2, 然后取出对应内存中的字符。问题:数组指针为什么在有些时候我们需要定义指向数组而不是指向数组元素的指针?如何定义?答案与分析:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 4 页个人收集整理仅供参考学习使用指针, 目的是用来保存某个元素的地址,从而来利用指针独有的优点,那么在元素需要是数组的情况下,就理所当然要用到指
4、向数组的指针,比如在高维需要动态生成情况下的多维数组。定义例子如下:int (*pElement)2。下面是一个例子:int array23 = 1,2,3 ,4 ,5,6; int (*pa)3; /定义一个指向数组的指针pa = &array0; / &符号能够体现pa 的含义,表示是指向数组的指针printf (%d, (*pa)0) ; / 将打印 array00,即 1 pa+ ; / 猜一猜,它指向谁?array1 ?对了!printf (%d, (*pa)0); / 将打印 array10,即 4 上述这个例子充分说明了数组指针一种指向整个数组的指针的定义和使用。需要说明的是,按
5、照我们在第四篇讨论过的,指针的步进是参照其所指对象的大小的,因此,pa+ 将整个向后移动一个数组的尺寸,而不是仅仅向后移动一个数组元素的尺寸。问题:指针数组有如下定义:struct UT_TEST_STRUCT *pTo2MAX_NUM; 请分析这个定义的意义,并尝试说明这样的定义可能有哪些好处?答案与分析:前面我们谈了数组指针,现在又提到了指针数组,两者形式很相似,那么,如何区分两者的定义呢?分析如下:数组指针是:指向数组的指针,比如int (*pA)5。指针数组是:指针构成的数组,比如int *pA5。至于上述指针数组的好处,大致有如下两个很普遍的原因:a)、各个指针内容可以按需要动态生成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年水滴石穿C语言之指针 2022 水滴石穿 语言 指针
限制150内