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)如果是的话,这到底是什么意思?人们是如何解读和/或阅读的?
发布于 2017-05-09 08:29:21
正确,考虑到array[i]是表达式的一部分,那么array“衰变”成为指向其第一个元素的指针,这就是为什么上述情况成立的原因。
是的,因为函数参数调整规则(“衰减”),它类似于表达式中的数组衰减。该数组的第一项是int*,因此在衰变后,您将得到一个指向此类类型的指针,即int**。
这只适用于您发布的特定格式的函数,否则指针到指针和数组之间没有任何关系。
没什么声明是不会转换的。它是一个由5个整数组成的数组。
总之,你实际上列出了三个不同的案例。
发布于 2017-05-09 08:22:41
我想你混淆了两件事。
*(array+i)不能用于声明,只能用于访问内存位置(数组是起始地址,i是偏移量)
另外,下面的声明将在堆栈上创建一个由5个整数组成的数组
int array[5]; 您可以使用其他符号访问数组中的任何元素,因为值正被推送到堆栈中。以下两项结果相同:
int a = *(array+3);
int b = array[3];
if (a == b) printf("Same value");
else printf("Not same value");https://stackoverflow.com/questions/43864364
复制相似问题