您的位置:首页 > 编程语言 > C语言/C++

c语言==数组和指针间的联系与区别(10)

2016-07-21 14:04 411 查看

数组与指针的联系

例如,在某个函数的形参里,会有char ptr[100],这时编译器会将它默认看成是char * ptr,在函数里面可以自增,即ptr++

类似地,char src[3][100]也可以被看做是char *src[100]

//传二维数组,用一维数组指针

//若此时*(src + i),即src[i],是加的100步长

//所以中括号里的100不可以省略,不然不知道步长是多少

由此可见,char src[2][3][100],可看做是char *src[3][100]

值得注意的是,char *ptr[3],可看做是
char **ptr


//因为这传的是一个指针数组,所以要将数组里的元素即指针保存起来,一般保存的都是地址,所以要用指针,所以要用指针来保存数组里的指针,即用指针的指针来保存。

//
**ptr 有两种解释,一种就是指针变量的地址,一种就是数组指针。


//指针数组里的指针都是野指针,要利用规避野指针的方法来应对

数组与指针的区别

空间分配:

数组:是一种静态分配(静态存储区或栈空间)

指针:是一种动态分配(堆空间)

访问效率

数组:直接访问值(更高)

指针:间接访问值

安全性

数组:可能会出现数组越界(更高)

指针:可能会造成内存泄漏

函数形参

数组:一维数组用指针存放,二维数组用一维指针存放

处理对象

数组:偏向于对值的处理

指针:偏向于对机器数的处理

空间连续性

数组:一定是连续的空间

指针:不一定是连续的空间

常见的内存错误及对策(在重要步骤下printf提示信息或者用gdb来找段错误)

1、内存分配未成功,却使用了他

2、内存分配虽成功,但尚未初始化就引用了他

3、内存分配成功并已初始化,但操作越过了内存的边界

4、忘记释放内存,造成内存泄漏

5、释放了内存却继续使用他
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息