例如,我有这个声明:
int a[10];
Run Code Online (Sandbox Code Playgroud)
以前,我这样理解:a实际上是一个指针,它会在内存中连续指向10个元素.
但今天,当我的老师教我时,他说:它将是一个指针数组,每个指针都指向它的值.
我不知道哪个是真的.请告诉我.
在此之前,我理解为:a实际上是一个指针,它将在内存中连续指向10个元素.
这是错误的,它是一个数组.它在内存中有一个特定的位置,可以容纳10个整数.a = &some_int但是,使用指针可以执行此操作,但这不适用于数组.如果传递a给期望指针的函数,它将被衰减(转换为)指针,但这是不同的.
但是,今天,当我的老师嘲笑我时,他说:它将有一个指针数组,每个指针都指向它的值.
这也是错误的,它是一个由10个整数组成的数组.要有10个整数指针,您需要将其定义为int *a[10].仍然元素不指向他们的价值观.
你和你的老师都错了.
a将具有指针的一些功能int,你可以将它作为指针传递给函数并执行标准指针算术,但它仍然是C术语中的数组; 你不能改变它(例如对待它int * const).
但是,你是正确的,元素a将作为连续数组放在内存中,而不是指向随机位置的指针.