首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组符号转换为指针符号

将数组符号转换为指针符号
EN

Stack Overflow用户
提问于 2017-05-09 08:03:52
回答 2查看 3.3K关注 0票数 2
代码语言:javascript
复制
int  array[5];

表达式,如

代码语言:javascript
复制
 array[3] gets converted to *(array+3)

或在

代码语言:javascript
复制
void fun ( int *array[] );

*array[] gets converted to int **array 

我想知道数组声明是什么

代码语言:javascript
复制
int array[5]; 

转换成?是吗

代码语言:javascript
复制
int *(array+5)

如果是的话,这到底是什么意思?人们是如何解读和/或阅读的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-09 08:29:21

  • arrayi被转换为*(array+i)

正确,考虑到array[i]是表达式的一部分,那么array“衰变”成为指向其第一个元素的指针,这就是为什么上述情况成立的原因。

  • 无效乐趣( Int *array[] ); *array[]转换为Int **数组

是的,因为函数参数调整规则(“衰减”),它类似于表达式中的数组衰减。该数组的第一项是int*,因此在衰变后,您将得到一个指向此类类型的指针,即int**

这只适用于您发布的特定格式的函数,否则指针到指针和数组之间没有任何关系。

  • 我想知道数组声明是什么 Int array5; 转换成?

没什么声明是不会转换的。它是一个由5个整数组成的数组。

总之,你实际上列出了三个不同的案例。

  • 当数组被用作表达式的一部分时,它将“衰变”为指向第一个元素的指针。
  • 当一个数组被用作函数参数声明的一部分时,它也会“衰变”--实际上它的类型在编译时被编译器替换--成为指向第一个元素的指针。C是以这种方式设计的,这样函数就可以与表达式中使用的数组一起工作。
  • 当数组通常被声明(不是参数列表的一部分)时,除了得到一个指定大小的数组外,什么都不会发生。
票数 5
EN

Stack Overflow用户

发布于 2017-05-09 08:22:41

我想你混淆了两件事。

代码语言:javascript
复制
*(array+i)

不能用于声明,只能用于访问内存位置(数组是起始地址,i是偏移量)

另外,下面的声明将在堆栈上创建一个由5个整数组成的数组

代码语言:javascript
复制
int array[5]; 

您可以使用其他符号访问数组中的任何元素,因为值正被推送到堆栈中。以下两项结果相同:

代码语言:javascript
复制
int a = *(array+3);
int b = array[3];
if (a == b) printf("Same value");
else printf("Not same value");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43864364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档