gpt4 book ai didi

c++ - 在 C++ 中访问二维数组的起始元素

转载 作者:行者123 更新时间:2023-11-30 00:37:06 24 4
gpt4 key购买 nike

我遇到了这段代码。在 cout 语句中,条件评估为真。

   a[10][10]=’h’;
cout<<(a[0]==*a)&&(*a==0[a]);

使用0[a] 访问数组元素/地址是新事物。有人可以解释这种类型的符号吗?

最佳答案

来自 http://c-faq.com/aryptr/joke.html

问:我遇到了一些包含表达式 5["abcdef"] 的玩笑代码。这怎么可能是合法的 C?

A:是的,Virginia,数组下标在 C 中是可交换的。[脚注]这个奇怪的事实来自数组下标的指针定义,即 a[e] 等同于 *((a)+(e)) ,对于任意两个表达式a和e,只要其中一个是指针表达式,一个是整数。 “证明”看起来像

a[e]
*((a) + (e)) (by definition)
*((e) + (a)) (by commutativity of addition)
e[a] (by definition)

这种出乎意料的交换性经常在 C 文本中被提及,好像它是值得骄傲的东西,但它在混淆 C 竞赛之外没有发现任何有用的应用(见问题 20.36)。

因为 C 中的字符串是 char 数组,表达式“abcdef”[5] 是完全合法的,计算结果为字符“f”。您可以将其视为

char *tmpptr = "abcdef";

... tmpptr[5] ...

关于c++ - 在 C++ 中访问二维数组的起始元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com