4

例如,我有这个声明:

int a[10]; 

之前我是这样理解的:a其实是一个指针,它会连续指向内存中的10个元素。

但是今天老师教我的时候说:会是一个指针数组,每个指针都指向它的值。

我不知道哪个是真的。请告诉我。

4

5 回答 5

9

之前,我是这样理解的:a 实际上是一个指针,它会连续指向内存中的 10 个元素。

这是错误的,它是一个数组。它在内存中有一个特定的位置,可以保存 10 个整数。使用指针可以做到a = &some_int,但是,这不适用于数组。如果您传递a给期望指针的函数,它将被衰减(转换为)指针,但这是不同的。

但是,今天,当我的老师教我时,他说:它会有一个指针数组,每个指针都指向它的值。

这也是错误的,它是一个 10 个整数的数组。要拥有 10 个整数指针,您需要将其定义为int *a[10]. Still 元素不指向它们的值。

于 2012-07-16T08:16:23.433 回答
6

你和你的老师都错了。

a将具有指针的一些特性int,您可以将其作为指针传递给函数并执行标准指针运算,但它仍然是 C 术语中的数组;例如,您无法更改它(将其视为int * const)。

但是,您是对的, 的元素a将作为连续数组放置在内存中,而不是指向随机位置的指针。

于 2012-07-16T08:18:05.790 回答
1

我敢打赌你误解了你的老师。

a 实际上是一个指针,它将连续指向内存中的 10 个元素。

几乎没问题。(在某些情况下,您可以这样想。但它过于简单化了,其他人解释了原因。)

它将是一个指针数组

这是完全错误的。

每个指针都指向它的值。

这是完全错误的。

于 2012-07-16T08:29:30.730 回答
0

简单来说,“'a' 是一个在内存中连续保存 10 个元素的变量”,这就是我们将其称为数组的原因。访问变量的元素需要索引。即,要访问变量“a”的第 5 个元素,我们需要指定 a[5]。指定“a”指向连续内存位置的起始地址,指定 a+5 指向从第一个连续内存开始的第 5 个元素。

于 2012-07-16T10:37:10.427 回答
0

您可以在此处参考有关数组和指针的一个很好的常见问题解答:http: //c-faq.com/aryptr/index.html

int a[10]; 指在内存中分配的 10 个整数单元。

int *b = a;等价于int *b = &a[0];并且意味着 b 指向 a 的第一个单元格。

于 2015-08-02T17:41:39.780 回答