【问题标题】:In what contexts are arrays not turned into pointers? [duplicate]在什么情况下数组不会变成指针? [复制]
【发布时间】:2014-12-09 10:51:17
【问题描述】:

数组引用(即在值上下文中提及数组)会变成指针。

——C-FAQ

是否有一个程序(可以编译)如果用指针值替换数组值会得到不同的行为?

让“不同的行为”意味着不同的计算结果,而不是任何编译器将如何以不同的方式编译代码以给出相同的结果,或者一个编译器如何编译而另一个不编译。

【问题讨论】:

  • 一个例子:sizeof 操作符的行为不同。
  • 另一个例子:你不能将++应用到一个数组,但你当然可以应用到一个指针。
  • 尝试使用2d int arraypointer to pointer to int。 2 的行为方式非常不同。巧合的是,我和我的同事从 2 天开始就在讨论这个问题,并确定了一个令人满意的结果..

标签: c arrays pointers


【解决方案1】:

数组引用变为指针,除非它是sizeof 和一元& 运算符的操作数。

【讨论】:

  • 所以你说数组不会变成a++a =中的指针
  • @MattMcNabb;我没有说那个。我说过数组名称是不可修改的左值,不像指针。
  • 你不清楚在这些情况下它是否会变成指针
  • @MattMcNabb;删除了那部分。我不确定。
  • 叹息。 C11 (n1570) 6.3.2.1 p3、6.5.2.4 p1、6.5.3.1 p3、6.5.16 p2。
【解决方案2】:

指针可能未指向有效的内存位置(例如,它可能是 NULL 指针)。数组不会发生这种情况。

【讨论】:

  • 这是喜欢编程语言的一个原因(主要是)。您的意思是可能不会,而我首先阅读它是因为不能。歧义语言的奇迹是吗?
  • 你是对的 - 我不是以英语为母语的人。我更正了。
  • 我很幽默。你的原文是正确的,但含糊不清,就像英语一样。您的更正准确无误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多