首页 > 代码库 > 你真的了解数组和指针么?
你真的了解数组和指针么?
1. 数组和指针的联系想来都是密不可分的.
实际上, 在C语言中, 只存在一维数组, 而你所看到和学到的那些所谓的多维数组, 只不过是用一维数组构造出来的. 其本质依旧是一个普普通通的一维数组. 而关键就在于, 这个一维数组中的元素, 可以是任意类型的对象. 如果我在里面放几个数组, 那么它自然就变成了多维的数组了.
2. 我们如何表示一个数组呢? 只用两个关键点即可: 大小, 首元素地址.
你或许会说, 那下标呢? 不是可以通过下标访问数组么? 没错, 这也是正确的用法, 但是, 你要知道, 那只是看上去是下标而已, 实际上在内部依旧是使用指针来进行操作的, 破开表面现象,进而看到最本质的内容, 这始终是令人激动人心的事啊.
所以, 一个优秀的工程师, 必须具备将数组运算与其对应的指针运算融汇, 并且贯通起来.
3. 如果将数组作为参数传递给一个函数, 该怎么做呢?
在C语言中, 我可以明确地告诉你, 这是无法做到的. 那么我们怎么解决这个问题呢? 使用如下方法:
1) 如果你使用了一个数组名作为参数了, 那么该名称就会被系统转换为指向该数组首元素的地址的指针. 例如:
char s [ ] = "hello, c++";
printf(" %s \n ", s);
printf(" %s \n ", &s[0]); // 这两种写法是等价的
这使得以数组名作为函数参数变得毫无意义. 因此, C语言自动将数组名声明转换为指针声明, 例如:
int length( char s [ ])
{
/ ......
}
// 等价于:
int length( char *s)
{
/ ......
}
你真的了解数组和指针么?