数组和指针

数组和指针

数组和指针的统一性C语言的长处之一,用指针可以很方便地访问数组和模拟动态分配的数组。

多数的数组引用都会退化为数组第一个元素的指针,这是C语言中数组和指针等价的基础。因此,数组在C语言中是个二等公民:你永远也不能作为一个整体操作数组(例如:复制或将它们传入数组),因为一旦你提到数组的名字,你所得到的就是一个指针而不是一个数组了。

       关于char a[]=”hello”char *p=”world”的区别:

clip_image002[4]

       其中a为数组预留了6个字符的位置,而p只是提供了一个指针。本质区别为:一旦出现类似a的数组和类似p的指针,以后的操作就会按照不同的方法计算。

       数组和指针的区别

数组是一个由(同一类型的)连续元素组成的预先分配的内存块;

指针是一个对任何位置的(特定类型的)数据元素的引用;

数组自动分配空间,但是不能重分配或改变大小;

指针必须被赋值以指向分配的空间(可能使用malloc),但是可以随意重新赋值(即指向不同的对象),同时除了表示一个内存块的基址之外,还有许多用途;

数组和指针的联系

指针可以模拟数组;

几乎没有所谓数组的东西,下标操作符实际上是个指针操作符;

从更高的层次上看,指向一块内存的指针本质上也就是一个数组;

 

如果a是数组int a[10],那么对a的引用就是“int型的指针,而&a“10int的数组的指针

 

       sizeof操作符如果能够判断出数组的大小,就会返回数组的大小,如果数组的大小未知或者数组已经退化为指针,就不能提供数组的大小了。