鱼C论坛

 找回密码
 立即注册
查看: 1782|回复: 13

[已解决]数组的引用和引用的数组

[复制链接]
发表于 2019-1-8 14:34:18 | 显示全部楼层 |阅读模式
10鱼币
如图

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

网上的答案不是很理解
最佳答案
2019-1-8 14:34:19
可以引用数组,但是不能在数组中存储引用
C495C63C-6DFC-491d-842F-D8573E0BE413.png

最佳答案

查看完整内容

可以引用数组,但是不能在数组中存储引用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-8 14:34:19 | 显示全部楼层    本楼为最佳答案   
可以引用数组,但是不能在数组中存储引用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-8 14:38:50 | 显示全部楼层
关键在于运算先后顺序,如果不加括号,[]优先级高一些,被先操作,等价于 & (a[10])
这样是不可以的,相当于是 &*a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

(这样是不可以的,相当于是 &*a)    这是为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-8 15:11:59 | 显示全部楼层
竟无语凝噎 发表于 2019-1-8 14:39
(这样是不可以的,相当于是 &*a)    这是为什么?

形参用 a[] 相当于 *a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-8 15:28:39 | 显示全部楼层
BngThea 发表于 2019-1-8 15:11
形参用 a[] 相当于 *a

这个我知道 ,  您的意思是不能引用一个指针的意思是吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-8 15:30:23 | 显示全部楼层
竟无语凝噎 发表于 2019-1-8 15:28
这个我知道 ,  您的意思是不能引用一个指针的意思是吗?

不是不能引用指针,是在形参中不能这样写,上面不是给了正确的写法吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-8 15:58:31 | 显示全部楼层
BngThea 发表于 2019-1-8 15:11
形参用 a[] 相当于 *a

而且我还有一个问题 , 就是如果不作为形参,而只是普通的。
int &a[10]  与int(&a)[10] 的区别在我理解是 :
第一种情况 a数组中有10个引用, 而第二种情况是a 是一个维度为10的数组的引用。
为什么第一种就不行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-8 22:09:41 | 显示全部楼层
f(int &arr[10]);    // arr是一个数组,有10个元素,这10个元素的类型都是引用,这10个元素的每一个都引用一个int
f(int (&arr)[10]);  // arr是一个引用,引用了一个数组,引用的这个数组有10个元素,每一个元素都是int

数组里面可以存储引用吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-9 09:21:56 | 显示全部楼层
人造人 发表于 2019-1-8 22:10
可以引用数组,但是不能在数组中存储引用

为什么在数组中不能存储引用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-9 09:55:05 | 显示全部楼层
引用的数组是非法的,在c++中不允许被使用!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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[3];
    int &b0 = a[0];
    int &b1 = a[1];
    int &b2 = a[2];
   
    b[0] = b0;
    b[1] = b1;
    b[2] = b2;
   
    for (auto i : b)
    {
            std::cout << i << std::endl;
        }
   
   
   
    return 0;
}



上面这段代码是我对 int &b[] 的理解
这里b是一个数组 , 其中的每个元素都是引用。
或者说这么理解哪里有问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-9 12:23:33 | 显示全部楼层
#include <iostream>
#include <string>



int main( void )
{
    int a[] = {10,20,30};
   
   
    int b[3];
    int &b0 = a[0];
    int &b1 = a[1];
    int &b2 = a[2];
   
    b[0] = b0;
    b[1] = b1;
    b[2] = 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[0] = b0;  // 对数组第0个元素赋值,因为b0引用了b[0],所以b[0] = b0;和b[0] = b[0];效果一样

b[0] = b0; // 相当于b[0] = b[0];
b[1] = b1; // 相当于b[1] = b[1];
b[2] = b2; // 相当于b[2] = b[2];


数组b中存储的是int
b0、b1、b2是引用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-9 13:08:56 | 显示全部楼层

十分感谢您的回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 04:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表