gpt4 book ai didi

c - 关于 C 中的指针

转载 作者:太空狗 更新时间:2023-10-29 17:22:16 24 4
gpt4 key购买 nike

我开始阅读一些关于 C 中指针的文章,但有一个我不理解的例子。

例子来自这里:http://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays

这里是:

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

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. */

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

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

有人可以解释我的错误在哪里吗?

最佳答案

除了少数异常(exception),在 C 中,数组名被转换为指向数组第一个元素的指针。 linearA 是一个数组 30 的 float 并且在表达式中:

A[0] = linearA;

它被转换为指向float 的指针。

A 是指向 float 的指针数组 6。 A 的元素是指向float 的指针类型。所以 A[0] 是指向 float 的指针,而不是指向数组的指针。

A[i][j] 在 C 中等同于 *(A[i] + j) 所以 A[i][j] 是一个 float(取消引用指向 float 的指针会产生一个 float)。

关于c - 关于 C 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15535521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com