繁体   English   中英

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

[英]C: what does `int a[10]` mean

例如,我有这个声明:

int a[10]; 

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

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

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

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

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

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

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

你和你的老师都错了。

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

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

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

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

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

它将是一个指针数组

这是完全错误的。

并且每个指针指向其值。

这是完全错误的。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM