C++ C+中的两种矩阵输出+;
我在不同的编译器中尝试了很多次,但都得到了相同的结果。我的问题是: 在C++中,给出了<代码> int a(10);C++ C+中的两种矩阵输出+;,c++,C++,我在不同的编译器中尝试了很多次,但都得到了相同的结果。我的问题是: 在C++中,给出了 int a(10);作为a的声明,则a[0]和0[a]的含义相同。我声称: cout << a[0]; cout因为数组索引操作在内部被解释为*(a+i)因为数组索引操作在内部被解释为*(a+i)让我声明一个数组:inta[10]Nowa表示数组在内存中的起始位置的某个内存地址,您可以将索引视为该内存地址的偏移量 因此,当将索引操作应用于数组时,值的定义如下:a[i]=*(a+i)通过加法的交
作为a
的声明,则a[0]
和0[a]
的含义相同。我声称:
cout << a[0];
cout因为数组索引操作在内部被解释为*(a+i)
因为数组索引操作在内部被解释为*(a+i)
让我声明一个数组:inta[10]
Nowa
表示数组在内存中的起始位置的某个内存地址,您可以将索引视为该内存地址的偏移量
因此,当将索引操作应用于数组时,值的定义如下:a[i]=*(a+i)
通过加法的交换属性,您可以看到a[0]=0[a]
,这是因为语言如何定义索引操作。假设我声明一个数组:int a[10]
Nowa
表示数组在内存中的起始位置的某个内存地址,您可以将索引视为该内存地址的偏移量
因此,当将索引操作应用于数组时,值的定义如下:a[i]=*(a+i)
通过加法的交换属性,您可以看到a[0]=0[a]
,因为索引操作是由语言定义的。而不仅仅是解释的;语言定义中就是这样定义它们的。@Pete:但仅限于内置类型。@BenVoigt-一旦进入用户定义类型,原始标识也不再适用。但我们不要把这个基本正确的答案拖进一个技术性的大鼠坑里。@Pete:另一方面,这个问题被标记为c++
,而不是c
,所以一个包含用户定义类型(或至少说明其限制)的答案可能是好的。因此,a[i]=i[a]意味着速度,而不仅仅是解释速度;语言定义中就是这样定义它们的。@Pete:但仅限于内置类型。@BenVoigt-一旦进入用户定义类型,原始标识也不再适用。但我们不要把这个本质上正确的答案拖进一个技术性的大鼠坑里。@Pete:另一方面,这个问题被标记为c++
,而不是c
,因此一个包含用户定义类型(或至少说明其限制)的答案可能是好的。因此,a[i]=i[a]表示couta
的速度可以使用地址实现,但它不是指针。然而,在这种情况下,它确实会退化为一。那么它是什么呢?我一直认为它是数组的第一个元素的地址然后a
是一个数组。它的类型是int[10]
而不是int*
。它的大小是10*sizeof(int)
而不是sizeof(int*)
。只是出于好奇,那么a的值是什么?a的值是整个数组。但是有一个从数组类型到指针类型的隐式转换,所以可以在任何可以使用指针的地方使用它。这种区别出现在sizeof
这样的情况下,它同时适用于数组和指针,并且由于数组情况不需要转换,编译器会更喜欢它。a
可以使用地址实现,但它不是指针。然而,在这种情况下,它确实会退化为一。那么它是什么呢?我一直认为它是数组的第一个元素的地址然后a
是一个数组。它的类型是int[10]
而不是int*
。它的大小是10*sizeof(int)
而不是sizeof(int*)
。只是出于好奇,那么a的值是什么?a的值是整个数组。但是有一个从数组类型到指针类型的隐式转换,所以可以在任何可以使用指针的地方使用它。这种区别出现在sizeof
这样的情况下,它同时适用于数组和指针,而且由于数组情况不需要转换,编译器会更喜欢它。也许你最好说a
是什么类型。因为。好的)让我们假设int a[10];也许你最好也说一下a
是什么类型。因为。好的)让我们假设int a[10];
cout << 0[a];