我开始阅读一些关于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吗?
谁能解释我的错误在哪里?
除了少数例外,在 C 中,数组名称会转换为指向数组第一个元素的指针。linearA是一个由 30float和 组成的数组,表达式为:
A[0] = linearA;
Run Code Online (Sandbox Code Playgroud)
它被转换为指向 的指针float。
A是一个指向 的指针的数组 6 float。are的元素的A类型为指向 的指针float。A[0]指向数组的指针也是如此float,而不是指向数组的指针。
在A[i][j]C 中,相当于a (取消引用指向*(A[i] + j)的指针会产生 a )。A[i][j]floatfloatfloat
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |