int array[5];
表达式如
array[3] gets converted to *(array+3)
或者在
void fun ( int *array[] );
*array[] gets converted to int **array
我想知道数组声明是什么
int array[5];
转换为?是吗
int *(array+5)
如果是,这意味着什么?人们如何解释和/或阅读它?
最佳答案
-
array[i] gets converted to *(array+i)
正确,鉴于
array[i]
是 expression 的一部分,然后array
“衰减”为指向其第一个元素的指针,这就是上述内容成立的原因。 -
Void fun ( Int *array[] );
*array[] gets converted to Int **array是的,因为函数参数调整(“衰减”)的规则,类似于表达式中的数组衰减。该数组的第一项是一个
int*
,所以在衰减之后,您最终得到一个指向这种类型的指针,一个int**
。这仅适用于具有您发布的特定格式的函数,否则指针到指针和数组之间没有任何关系。
-
I was wondering what does the array declaration
Int array[5];
Get converted to?没有,声明不会被转换。它是一个包含 5 个整数的数组。
总而言之,您实际上列出了 3 种不同的情况。
- 当数组用作表达式的一部分时,它“退化”为指向第一个元素的指针。
- 当数组用作函数参数声明的一部分时,它也会“衰减”——实际上它的类型在编译时被编译器替换——变成指向第一个元素的指针。 C 有意这样设计,以便函数可以与表达式中使用的数组一起工作。
- 正常声明数组(不是参数列表的一部分)时,除了获得指定大小的数组外,什么也不会发生。
关于将数组表示法转换为指针表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43864364/