指针数组和数组指针_指针数组里面存放的是什么

指针数组和数组指针_指针数组里面存放的是什么C++指针和数组目录:3、数组与指针4、指针的潜在危险“3.数组与指针3.1一维数组与指针定义指针变量指向数组首素,以指针变量名代替数组名,实现数组操

C++指针和数组   目录:   3、数组与指针   4、指针的潜在危险   “   3.数组与指针   3.1一维数组与指针   定义指针变量指向数组首素,以指针变量名代替数组名,实现数组操作。(指针所指位置不变)   指针变量从前到后依次指向数组各素,通过指针的取内容运算得到对应素。(指针所指位置不断变化)   例:用下列数据初始化一维数组,并通过指针变量求素的最大值。   8.2 6.5 3 9.7 12 2.8 7.6 15 10.3   定义实型指针p指向数组b的首素,max 表示最大值;   以p 代替b,通过循环语句输出数组的各素;   指针p 从第二个素开始遍历数组,遍历过程中将比max 大的素赋给max。   l指针变量只能代表其所指向的数组。当指针不再指向数组的首素时,不能代表原数组。 3.2二维数组与指针 3.2.1素指针与行指针   指向素的指针简称素指针。(指向素)   二维数组素指针与一维数组素指针的定义方式相同,使用方法相似。如:   行指针定义:   指向二维数组某行的指针简称行指针。(指向一行)   二维数组数组名b 是b[0]的地址(&b[0]),b[0]是二维数组的第一行,即b是指向二维数组第1行的行指针;且b[0]是由5 个素组成的一维数组,故行指针也称为指向一维数组的指针。   数据类型与所指向的二维数组的数据类型相同;   下标为二维数组的列数,通常为整型常量表达式;   必须用“()”将指针变量名括起来。   如:   二维数组行地址、素地址和素之间的关系   对行地址进行取值运算可以得到素地址;   对素地址进行取值运算可得到二维数组的素。 分类表示方法备注行指针p2+i,&p2[i]下标为i行的行地址素指针*(p2+i)+j,p2[i]+j下标为i行j列的素地址素* (* (p2+i)+j),*(p2[i]+j),p2[i] [j]下标为i行j列的素 3.2.2素指针使用二维数组   将二维数组作为一个行数×列数的一维数组   定义素指针指向二维数组的第一行第一列素;   一维数组名为指针变量名;   一维数组大小为二维数组的行数×列数。 3.2.3行指针使用二维数组   定义行指针指向二维数组的首行   行指针变量名代替二维数组名,实现二维数组的操作;   行指针取值运算得到素地址,然后素地址取值运算得到素,完成对二维数组的操作。   注意素指针与行指针使用的区别,指针所指的位置。   例:通过指针输出下列二维数组,并求各素的和。   2 3 1 4 10   6 2 5 8 3   7 8 9 6 12   行指针p1:&b[0];p1+1:&b[1]   素指针p2:&b[0] [0];p2+1:&b[0] [1]   3.2.4字符数组与指针   字符型指针变量指向字符串   定义时用字符串对其初始化;   (1)用字符串对指针变量赋值。   如:   (2)直接引用字符型指针变量所指的字符数组   结合前面讲过的二级指针,我们来看看使用的实例。   例:设计一个程序,将字符串中的字符逆序。如将“I am a student.”逆序为“.tneduts a ma I”。   数组str 存储字符串,指针s1 指向首素,s2 指向尾素。   当s1在s2前面时,将s1 和s2 所指的素互换;然后s1 后移一个素,s2 前移一个素。   指针使用数组   搞清指针所指位置   分清操作对象是指针本身还是指针所指内存空间   分清所使用的是素指针还是行指针   充分理解指针的含义:地址;代表所指向的数组。 3.2.5指针数组   各素为指针变量的数组。   普通数组中存储的是普通数据(数值),指针数组中存储的是地址。   定义:   如:   4.指针的潜在危险   指针的让我们对内存的操作有了很大的自由性,同时也带来了潜在的危险。 4.1产生的原因:   1.定义指针变量的同时未对其进行初始化:指针在被定义的时候,如果程序不对其进行初始化的话,它会指向随机区域,因为任何指针变量(除了static修饰的指针变量)在被定义的时候是不会被置空的,它的默认值是随机的。   2.指针所指向的内存空间被释放时,却没有对该指针变量的值(即该指针原来指向的内存空间的地址)进行置空:我们在用库函数malloc开辟内存空间时,要检查返回值是否为空,如果为空,则开辟失败;如果不为空,则指针指向的是开辟的内存空间的首地址。指针指向的内存空间在用free()或者delete(注意delete只是一个操作符,而free()是一个函数)释放后,如果程序员没有对其置空或者其他的赋值操作,就会使其成为一个野指针。   3.指针操作超越变量作用域. 4.2危害:   上述问题在于,指针指向的内存空间已经无效了,而该指针变量的值(即该指针原来指向的内存空间的地址)没有被置空,解引用一个非空的无效指针是一个未被定义的行为,也就是说不一定导致段错误,野指针很难定位到是哪里出现的问题,在哪里这个指针就失效了,不好查找出错的原因。所以调试起来会很麻烦,有时候会需要很长的时间。 4.3规避的方法:   1.在定义一个指针时同时初始化为NULL;   2.释放指针指向的内存空间时,将指针重置为NULL。   3.使用时不要超出变量作用域,如使用数组时:

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/69926.html

(0)
上一篇 2024年 8月 7日 下午6:06
下一篇 2024年 8月 7日 下午6:10

相关推荐

关注微信