C:`int a [10]`是什么意思

时间:2012-07-16 08:14:03

标签: c arrays pointers

例如,我有这个声明:

int a[10]; 

之前,我理解为:a实际上是一个指针,它将在内存中连续指向10个元素。

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

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

5 个答案:

答案 0 :(得分:9)

  

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

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

  

但是,今天,当我的老师嘲笑我时,他说:它会有一个阵列   指针,每个指针指向其值。

这也是错误的,它是一个由10个整数组成的数组。要有10个整数指针,您需要将其定义为int *a[10]。仍然没有指出他们的价值观。

答案 1 :(得分:6)

你和你的老师都错了。

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

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

答案 2 :(得分:1)

我打赌你误会了你的老师。

  

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

几乎确定。 (在某些情况下,你可以这样想。但这是一个很大的过度简化,其他人解释了原因。)

  

它将是一个指针数组

这是完全错误的。

  

并且每个指针指向其值。

这是完全错误的。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您可以在这里引用关于数组和指针的精彩常见问题解答:http://c-faq.com/aryptr/index.html

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

int *b = a;相当于int *b = &a[0];,意味着b指向a的第一个单元格。