竟无语凝噎 发表于 2019-1-8 14:34:18

数组的引用和引用的数组

如图

求大神解答为什不引用的数组不可以
而数组的引用可以?

网上的答案不是很理解

人造人 发表于 2019-1-8 14:34:19

可以引用数组,但是不能在数组中存储引用

BngThea 发表于 2019-1-8 14:38:50

关键在于运算先后顺序,如果不加括号,[]优先级高一些,被先操作,等价于 & (a)
这样是不可以的,相当于是 &*a

竟无语凝噎 发表于 2019-1-8 14:39:58

BngThea 发表于 2019-1-8 14:38
关键在于运算先后顺序,如果不加括号,[]优先级高一些,被先操作,等价于 & (a)
这样是不可以的,相当 ...

(这样是不可以的,相当于是 &*a)    这是为什么?

BngThea 发表于 2019-1-8 15:11:59

竟无语凝噎 发表于 2019-1-8 14:39
(这样是不可以的,相当于是 &*a)    这是为什么?

形参用 a[] 相当于 *a

竟无语凝噎 发表于 2019-1-8 15:28:39

BngThea 发表于 2019-1-8 15:11
形参用 a[] 相当于 *a

这个我知道 ,您的意思是不能引用一个指针的意思是吗?

BngThea 发表于 2019-1-8 15:30:23

竟无语凝噎 发表于 2019-1-8 15:28
这个我知道 ,您的意思是不能引用一个指针的意思是吗?

不是不能引用指针,是在形参中不能这样写,上面不是给了正确的写法吗

竟无语凝噎 发表于 2019-1-8 15:58:31

BngThea 发表于 2019-1-8 15:11
形参用 a[] 相当于 *a

而且我还有一个问题 , 就是如果不作为形参,而只是普通的。
int &a与int(&a) 的区别在我理解是 :
第一种情况 a数组中有10个引用, 而第二种情况是a 是一个维度为10的数组的引用。
为什么第一种就不行?

人造人 发表于 2019-1-8 22:09:41

f(int &arr);    // arr是一个数组,有10个元素,这10个元素的类型都是引用,这10个元素的每一个都引用一个int
f(int (&arr));// arr是一个引用,引用了一个数组,引用的这个数组有10个元素,每一个元素都是int

数组里面可以存储引用吗?

竟无语凝噎 发表于 2019-1-9 09:21:56

人造人 发表于 2019-1-8 22:10
可以引用数组,但是不能在数组中存储引用

为什么在数组中不能存储引用?

mqcake 发表于 2019-1-9 09:55:05

引用的数组是非法的,在c++中不允许被使用!

竟无语凝噎 发表于 2019-1-9 10:50:45

本帖最后由 竟无语凝噎 于 2019-1-9 10:51 编辑

人造人 发表于 2019-1-8 22:10
可以引用数组,但是不能在数组中存储引用

#include <iostream>
#include <string>



int main( void )
{
    int a[] = {10,20,30};
   
   
    int b;
    int &b0 = a;
    int &b1 = a;
    int &b2 = a;
   
    b = b0;
    b = b1;
    b = b2;
   
    for (auto i : b)
    {
            std::cout << i << std::endl;
        }
   
   
   
    return 0;
}



上面这段代码是我对 int &b[] 的理解
这里b是一个数组 , 其中的每个元素都是引用。
或者说这么理解哪里有问题?

人造人 发表于 2019-1-9 12:23:33

#include <iostream>
#include <string>



int main( void )
{
    int a[] = {10,20,30};
   
   
    int b;
    int &b0 = a;
    int &b1 = a;
    int &b2 = a;
   
    b = b0;
    b = b1;
    b = b2;
   
    for (auto i : b)
    {
            std::cout << i << std::endl;
      }
   
   
   
    return 0;
}


数组b中存储的是什么?
数组b中存储的是int

b0是引用,引用了数组的第0个元素,第0个元素是int类型
b1是引用,引用了数组的第1个元素,第1个元素是int类型
b2是引用,引用了数组的第2个元素,第2个元素是int类型

b = b0;// 对数组第0个元素赋值,因为b0引用了b,所以b = b0;和b = b;效果一样

b = b0; // 相当于b = b;
b = b1; // 相当于b = b;
b = b2; // 相当于b = b;


数组b中存储的是int
b0、b1、b2是引用

竟无语凝噎 发表于 2019-1-9 13:08:56

人造人 发表于 2019-1-9 12:23
#include
#include



十分感谢您的回复{:5_109:}
页: [1]
查看完整版本: 数组的引用和引用的数组