将数组表示法转换为指针表示法
Converting array notation to pointer notation
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)
如果是,这到底是什么意思?如何解读它 and/or 阅读它?
我认为你混淆了两件事。
*(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");
array[i] gets converted to *(array+i)
正确,鉴于 array[i]
是 表达式 的一部分,然后 array
"decays" 指向其第一个元素的指针,这这就是为什么上述成立。
Void fun ( Int *array[] );
*array[] gets converted to Int **array
是的,因为函数参数调整的规则("decay"),类似于表达式中的数组衰减。该数组的第一项是一个 int*
,所以在衰减之后你最终得到一个指向这种类型的指针,一个 int**
。
这仅适用于具有您发布的特定格式的函数,否则指针到指针和数组之间没有任何关系。
I was wondering what does the array declaration
Int array[5];
Get converted to?
没有,声明不会被转换。它是一个包含 5 个整数的数组。
总而言之,您实际上列出了 3 种不同的情况。
- 当数组用作表达式的一部分时,它 "decays" 变成指向第一个元素的指针。
- 当数组用作函数参数声明的一部分时,它也 "decays" - 实际上它的类型在编译时被编译器替换 - 成为指向第一个元素的指针。 C 特意设计成这样,以便函数可以与表达式中使用的数组一起工作。
- 正常声明数组(不是参数列表的一部分)时,除了获得指定大小的数组外,什么也不会发生。
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)
如果是,这到底是什么意思?如何解读它 and/or 阅读它?
我认为你混淆了两件事。
*(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");
array[i] gets converted to *(array+i)
正确,鉴于
array[i]
是 表达式 的一部分,然后array
"decays" 指向其第一个元素的指针,这这就是为什么上述成立。Void fun ( Int *array[] );
*array[] gets converted to Int **array是的,因为函数参数调整的规则("decay"),类似于表达式中的数组衰减。该数组的第一项是一个
int*
,所以在衰减之后你最终得到一个指向这种类型的指针,一个int**
。这仅适用于具有您发布的特定格式的函数,否则指针到指针和数组之间没有任何关系。
I was wondering what does the array declaration
Int array[5];
Get converted to?没有,声明不会被转换。它是一个包含 5 个整数的数组。
总而言之,您实际上列出了 3 种不同的情况。
- 当数组用作表达式的一部分时,它 "decays" 变成指向第一个元素的指针。
- 当数组用作函数参数声明的一部分时,它也 "decays" - 实际上它的类型在编译时被编译器替换 - 成为指向第一个元素的指针。 C 特意设计成这样,以便函数可以与表达式中使用的数组一起工作。
- 正常声明数组(不是参数列表的一部分)时,除了获得指定大小的数组外,什么也不会发生。