关于C中的指针

Far*_*eer 6 c

我开始阅读一些关于C中指针的文章,我有一个我不明白的例子.

示例来自:http://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays

这里是:

让我们看一个稍微不同的问题.我们想要一个二维数组,但我们不需要让所有行都具有相同的长度.我们所做的是声明一个指针数组.下面的第二行将A声明为指针数组.每个指针指向一个浮点数.这是一些适用的代码:

float  linearA[30];
 float *A[6];

 A[0] = linearA;              /*  5 - 0 = 5 elements in row  */
 A[1] = linearA + 5;          /* 11 - 5 = 6 elements in row  */
 A[2] = linearA + 11;         /* 15 - 11 = 4 elements in row */
 A[3] = linearA + 15;         /* 21 - 15 = 6 elements        */
 A[4] = linearA + 21;         /* 25 - 21 = 4 elements        */
 A[5] = linearA + 25;         /* 30 - 25 = 5 elements        */

 A[3][2] = 3.66;          /* assigns 3.66 to linearA[17];     */
 A[3][-3] = 1.44;         /* refers to linearA[12];           
                             negative indices are sometimes useful.
                             But avoid using them as much as possible. */
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么A[0]一个指针只指向五个元素而不是全部linearA,因为数组的名称是指向其第一个成员的指针.

并且A[1] = linearA + 5;连续6个元素 - 出于同样的原因?不A[1]应该是指向第6个成员的指针linearA吗?

谁能解释我的错误在哪里?

oua*_*uah 3

除了少数例外,在 C 中,数组名称会转换为指向数组第一个元素的指针。linearA是一个由 30float和 组成的数组,表达式为:

A[0] = linearA;
Run Code Online (Sandbox Code Playgroud)

它被转换为指向 的指针float

A是一个指向 的指针的数组 6 float。are的元素的A类型为指向 的指针floatA[0]指向数组的指针也是如此float,而不是指向数组的指针。

A[i][j]C 中,相当于a (取消引用指向*(A[i] + j)的指针会产生 a )。A[i][j]floatfloatfloat