在c++中访问2D数组的起始元素
accessing the starting element of 2D array in C++
我看到了这段代码。在cout语句中,条件的计算结果为true。
a[10][10]=’h’;
cout<<(a[0]==*a)&&(*a==0[a]);
使用0[a]
访问数组元素/地址是新事物。谁能解释一下这种符号?
From http://c-faq.com/aryptr/joke.html
问:我遇到了一些包含表达式5["abcdef"]的笑话代码。这怎么可能合法?
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中,0[a]
与a[0]
具有完全相同的含义,两者都等价于*a
。参见C常见问题解答。
只要a
是指针,所有这些表达式在c++中都具有与C中相同的语义。
假设a
是指向对象的指针,这些表达式总是相同的:
*a
0[a]
a[0]
这意味着这些表达式(a[0]==*a)
和(*a==0[a])
也是相同的,并且都求值为1
。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀