[英]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.