C语言 指针数组的使用

Python021

C语言 指针数组的使用,第1张

int **a可以表达一个二维数组。为什么呢?

你可以这么理解 * p[3]表达的是一个数组指针,这个指针 p[0]表示的是数组存的第一个地址。而数组实际上是一串连续地址的块。每一个小块存着一个内容。每次访问数组时,你为什么可以用数组名+下标访问呢? //比如a[i];

实际上就是 访问*a+i   * 这个符号可以表示你存的是变量的地址。而数组地址的第一位为int类型变量存的地址(你可以直接使用数组的地址加上单位变量的空间的大小去访问下个元素)。在这个程序中int *p[3] 表示可以存三个int 类型的地址。而p正好把二维数组的三个一维数组的开头的int类型变量的地址给存起来了。

给你举个例子

我现在输出的是地址,是不是连续的?

用*运算符获取地址的内容。

实际上p[i]与 *(p+i)是表达的是同一个意思。只不过只有数组可以定义一个连续的空间

(数组的第一个地址是随机的其他的是连续的。)单独用指针的话会随机分配的

数组的指针可以存三个地址。当然可以访问二维数组了。

数组名并不是一个普通的变量,而是一个指向数组首元素的指针。也就是说,我们可以用数组名来初始化一个对应类型的指针。虽然数组名是指针,但它是一个指针常量。也就是说,不带下标的数组名不能作为左值。指针是一种数据类型,所以,我们可以用指针类型来创建一个数组。声明一个指针数组的语句格式是:

指针类型 * 数组名[常量表达式];

对指针数组的操作和对指针变量的操作并无不同.

C语言中,数组的名称等价于数组的首地址,

当然可以利用指针开辟动态空间,使用方式与数组在形式上相同的,

但是他们有一个本质的区别,数组名相当于一个地址常数,而指针是一个以地址为内容的变量。

指针与数组的关系可以参考下面的网页:

http://zhidao.baidu.com/question/341950481.html