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)
如果是,这甚至意味着什么?如何解读和/或阅读它?
答案 0 :(得分:5)
array [i]转换为*(array + i)
正确,假设array[i]
是表达式的一部分,那么array
“衰变”成指向其第一个元素的指针,这就是为什么上述成立的原因。
Void fun(Int * array []);
* array []转换为Int ** array
是的,因为函数参数调整规则(“衰减”),类似于表达式中的数组衰减。该数组的第一项是int*
,因此在衰减之后,您最终会得到一个指向此类型的指针int**
。
这仅适用于您发布特定格式的函数,否则指针与数组之间没有任何关系。
我想知道数组声明是什么
Int array [5];
转换成?
没有,声明不会被转换。它是一个由5个整数组成的数组。
总结一下,你实际列出了3种不同的情况。
答案 1 :(得分:0)
我认为你混淆了两件事。
*(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");