c - 如何通过将数字添加到数组 'name' (即存储第一个元素地址的常量指针)来访问数组的元素?

标签 c arrays pointers

在 C 语言中,我被告知我们可以使用指针访问数组的元素,方法是将地址增加数组数据类型的内存大小。因此对于存储整数的数组 A,

int *ptr = &A[0];
for(int i = 0; i<3; i++)
{
printf("%p\n", *ptr)
ptr++ // here it's +4 cause int
}

将打印数组 A 的所有 3 个值。但是,由于数组的名称是一个常量指针,其中包含数组第一个元素的地址,因此我还看到了以下代码:

<information on site>

double *p;
double balance[10];

p = balance;

使用数组名作为常量指针是合法的,反之亦然。因此,*(balance + 4) 是访问 Balance[4] 处数据的合法方式。

</informationonsite>

但是怎么办呢?如果我将+4添加到存储在指针balance中的地址,如果balance[]是一个int数组,那么它相当于递增它,那么这将使它从指向balance[1]移动到balance[2],而不是指向balance[2]平衡[4]。因此取消引用 (*(balance+4)) 会给出balance[1]的值,而不是[4],对吗?请解释一下。

最佳答案

数组不是指针,数组名也不像数组一样是指针。在表达式中使用时,数组可以自动转换为指针,但某些异常(exception)情况除外,例如一元 & 的操作数运算符,sizeof运算符等。除了调试信息之外,数组名称将在运行时消失。

(pointer) + (integer)被定义为指向 (integer) 的指针(pointer) 指向的内容之后的元素在 N1570 6.5.6 加法运算符。您不必考虑地址。

您无法取消引用 (*(balance+4)) ,即类型 double(*(balance+4))相当于 balance[4] (请参阅 N1570 6.5.2.1 数组下标)。

关于c - 如何通过将数字添加到数组 'name' (即存储第一个元素地址的常量指针)来访问数组的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38957888/

相关文章:

C链表: head is changing

c - 如何用C写一个程序来测量缓存的速度?

c - 指针作为 C 中的函数参数

c - 这是使用 goto 的可接受方式吗?

javascript - ajax后在php中获取输入复选框值

javascript - 有没有办法在 TypeScript 中动态应用数组映射器?

C 中的字符连接

c - 将结构类型转换为整数时出错

C - 追加到我的数组中?

c++ - 是否对未指向序列未定义行为中的元素的指针递增/递减或添加整数值?