【发布时间】:2022-01-12 18:39:36
【问题描述】:
我在互联网上读到这个数组变量指向数组的第一个元素。代码示例如下:
#include <stdio.h>
int main()
{
int i,a[10];
for ( i = 0; i <= 9; ++i )
{
printf ("The address of the array element %d is = %p\n",i+1, &a[i]);
}
printf ("The address of the &a is = %p\n", &a);
printf ("The address of &a[0] is = %p\n", &a[0] );
printf ("The address of a is = %p", a);
return 0;
}
根据网上资料:数组变量a和数组元素a[0]的地址相同,因为数组变量名a指向数组的第一个元素,即a[0]。我的问题是:
- 数组变量 a 是指针吗,因为它指向数组的第一个元素?
-
如果数组变量a是一个指针,那么指针a和变量a[0]的地址不应该是(a 指向的指针)不同? (这里我们得到相同的地址)
-
如果数组变量a不是指针,那下面的代码该如何解释呢?
-
a[0] = *a
a[1] = *a+1
a[2] = *a+2
a[3] = *a+3
a[4] = *a+4
a[5] = *a+5
我想这是一个很长的问题,但请告诉我答案,因为我已经为此绞尽脑汁,现在我想用头撞墙。我也是堆栈溢出的新手。
【问题讨论】:
-
数组不是指针,但在某些情况下它衰减为指针。至于您的示例,它只是定义
a[x]与*(a+x)相同的语法糖,而不管a是数组还是指针。此外,x[a]可以写成x是整数,a是数组或指针,与a[x]相同。 -
好问题,但以前有人问过。这是一个可能的重复:Is an array name a pointer?
-
基本的C问题在这里已经回答了很多次了。使用搜索栏 - 它会节省你写这个问题的时间
-
数组和指针之间的关系是所有 C 语言中最基本和最重要的学习内容之一。不幸的是,它也可能是最令人困惑和最难学习的内容之一。像“一个数组是指向它的第一个元素的指针”这样的陈述,虽然是善意的并且很受欢迎,但不幸的是,在实际教育新学习者方面完全是灾难性的。无论您“在互联网上阅读”是什么页面,关闭该窗口并删除该链接并尝试忘记您在那里阅读的内容。
-
改为阅读:数组就是数组,指针就是指针。但是当你在表达式中使用数组时,比如
f(array)或x = array + 1,你需要数组的值,你得到的不是整个数组,你得到的是指向数组第一个元素的指针。那个新指针不是“数组”;当您尝试获取数组的值时,该新指针会喷出。
标签: arrays c pointers implicit-conversion