c++-C++的数组,为什么a[i]=i[a],求解释

问题描述

C++的数组,为什么a[i]=i[a],求解释

比如声明一个数组
int a[5]={1,2,3,4,5}

这时 a[3] 和 3[a] 的值都是3,求解为什么?

据说是因为i[a]=*(a+i),但是,为什么是这么规定的?是C++内定的规则,还是因为[ ] 中括号除了定义数组,还有更多的意义?求详细解释,非常感谢。

解决方案

是的[]有两个用途,数组声明 和 下标操作符,
注意在Array subscripting部分,E1[E2],只要有一个操作符为指针即可,没有顺序的哦。
实际上在C语言中,Array subscripting是完全可以不要的, 因为
E1[E2]
完全等价于
(*(E1+(E2)))

数组声明
3.5.4.2 Array declarators

Constraints

The expression that specifies the size of an array shall be an
integral constant expression that has a value greater than zero.

Semantics

If, in the declaration `` T D1 ,'' D1 has the form

     D[ constant-expression<opt>]

下标操作符
3.3.2.1 Array subscripting

Constraints

**One of the expressions shall have type ``pointer to object type ,''

the other expression shall have integral type, and the result has type
`` type .''**

Semantics

A postfix expression followed by an expression in square brackets
[] is a subscripted designation of a member of an array object. The
definition of the subscript operator [] is that E1[E2] is identical to
(*(E1+(E2))) . Because of the conversion rules that apply to the
binary + operator, if E1 is an array object (equivalently, a pointer
to the initial member of an array object) and E2 is an integer, E1[E2]
designates the E2 -th member of E1 (counting from zero).

解决方案二:

a是一个地址值,3是一个偏移量值。a[3]和3[a]都相当于这两个值相加,所以结果都指向同一个地址。
C++中数组与指针在很多方面是一致的,有些类似于相同内容的不同展示方式,但细节上还是有所区别的。

时间: 2024-12-24 22:12:44

c++-C++的数组,为什么a[i]=i[a],求解释的相关文章

class-编写一个使用类模板对数组进行排序、查找和求元素和的程序。

问题描述 编写一个使用类模板对数组进行排序.查找和求元素和的程序. 设计一个类模板templateclass Array,用于对T类型的数组进行排序.查找和求元素和,然后由此产生模板类Array和Array. 解决方案 http://www.warting.com/program/201109/33601.html 第四题 解决方案二: 编写一个使用类模板对数组进行排序,查找和求元素和的程序.

编程-数组类模板Array,类中包括对数组进行排序、查找和求元素和 然后由此产生模板类Array&amp;amp;lt;Box&amp;amp;gt;

问题描述 数组类模板Array,类中包括对数组进行排序.查找和求元素和 然后由此产生模板类Array<Box> #include using namespace std;class Box{private: int a b c;public: int V; Box(int chint kint g) { a = ch; b = k; c = g; V = a*b*c; } bool operator <(Box &one) { int temp = V - one.V; if (

iterator-关于status2 迭代数组的问题 纠结好久了 求回答

问题描述 关于status2 迭代数组的问题 纠结好久了 求回答 这个数组格式为[编号,金额,编号,金额,编号,金额..............] 现在我想把这个数组的每个元素都迭代出来 迭成表格的格式 数组长度不确定 就类似这样 编号 金额 1 3 2 4 4444 555 <s:iterator value="ss" status="st" id="array"> <s:iterator value="ss[#st

数组指针-关于一个数组的指针,求解释呀

问题描述 关于一个数组的指针,求解释呀 // 使用指针从函数返回一个数组 // paf是一个函数,它返回一个指针,该指针指向一个包含20个int元素的数组 int (*paf())[20] { int (*pear)[20]; int i = 0; pear = (int (*)[20])malloc(20 * sizeof(int)); printf("Malloc memory, Address: "); PRINT_ADDRESS(pear); // 打印所分配内存的地址 if

php-怎样删除二维数组中相同的一位数组 并保持相同键名 求大神写个函数

问题描述 怎样删除二维数组中相同的一位数组 并保持相同键名 求大神写个函数 Array ( [0] => Array ( [year] => 2013-2014 [term] => 1 [course_code] => 00008069 [course_name] => 咖啡世界 [course_nature] => 任意选修 [course_attribution] => 人文素养类 [credit] => 2.0 [point] => 4.1 [g

c语言数组定义-哪个大神能帮我解释下这段代码,在线等

问题描述 哪个大神能帮我解释下这段代码,在线等 这个是凯撒密码的代码,哪个大神帮我看哈我的这个里面每句的意思 解决方案 把英文字母变换一下,如D换为AA换为X,B换为Y 解决方案二: 就是获取到输入的字符串,然后对每一位进行判断,如果在区间[dz]或区间[DZ]减3,剩下的加23 解决方案三: 就是获取到输入的字符串,然后对每一位进行判断,如果在区间[dz]或区间[DZ]减3,剩下的加23 解决方案四: 就是获取到输入的字符串,然后对每一位进行判断,如果在区间[dz]或区间[DZ]减3,剩下的加

数组-为什么会溢出呢?求java大神指教

问题描述 为什么会溢出呢?求java大神指教 public class Test6{ public static void main(String[]args){ int size=10; double [] myList=new double[size]; myList[0]=1.2; myList[1]=1.3; myList[2]=1.0; myList[3]=1.0; myList[4]=1.0; myList[5]=1.0; myList[6]=1.0; myList[7]=1.0;

数组-求大神来帮忙!求解释!!谢谢!

问题描述 求大神来帮忙!求解释!!谢谢! $_POST[description] $_POST['description'] 这俩个加引号 不加引号有什么区别

JTextField创建了二维数组 但一直报错空指针 求大神解答

问题描述 publicclass成绩录入界面extendsJFrame{JTextField[][]scores;String[]course;String[]name;int[][]score;public成绩录入界面()throwsIOException{JTextField[][]scores=newJTextField[10][6];for(inti=0;i<scores.length;i++){for(intj=0;j<scores[i].length;j++){scores[i][