数组的引用_c++ 二维数组的引用 - CSDN
  • 转载:关于数组引用引用数组 一、大概区别 就像指针的数组和数组的指针一样耐人寻味 //array首先向右结合,所以这个相当于 (int&)array[] array是个数组,其中的元素是引用 //应该叫:引用数组 ...

    转载:关于数组的引用和引用的数组

    一、大概区别

    就像指针的数组和数组的指针一样耐人寻味

    //array首先向右结合,所以这个相当于 (int&)array[] array是个数组,其中的元素是引用
    //应该叫:引用的数组
    int &array[]
    //array首先和&结合,所以array是引用,引用的对象是数组
    //应该叫作数组的引用
    int (&array)[10] 
    二、引用的数组

    首先,可以明确的说明,引用的数组是不能当函数的参数的。再者要说明,这种方式是非法的。

    原因:从引用的本质说吧

    首先,引用必须被初始化,这没得说,而数组并不能被另一个数组初始化或被另一个数组赋值这是其一,并且其中的每一个引用,你没有办法给他一下子初始化。

    再次,引用它不支持传统意义的复制,它不占用新的空间

    再再次,他没有意义,它可以用指针数组实现,完全可以代替

    int i,j;
    int *a[5] = {&i, &j};
    a[0]; // point to i
    a[1]; // point to j
    再再再次,不好实现,因为编译器不知道应该分多大的内存给引用的数组。

    三、数组的引用

    如果不好理解,可以这样理解(从网上看到的)

    int n3[3] = {2, 4, 6};
    int (&rn3)[3] = n3;     //数组的引用

    四、数组的引用的应用

    void Test(int (&array)[5])
    {
    	cout << "size:" << sizeof(array) << endl;
    	for (int i = 0; i < sizeof(array)/4; i++)
    	{
    		cout << array[i] << " ";
    	}
    }
    int main()
    {
        int  array[5] = {1,2,3,4,5};
        Test(array);
        return 0;
    }
    

    out:

    size:20

    1 2 3 4 5 

    展开全文
  • 数组引用

    2019-05-29 09:30:06
    引用数组是不能当函数的参数的。 数组作为函数形参传递时,实际上是传递了数组首元素指针的一个副本,因为不能用一个数组初始化另外一个数组,所以数组作为形参时,函数是不知道这个数组的元素个数,只知道数组...

    引用的数组是不能当函数的参数的。

    数组作为函数形参传递时,实际上是传递了数组首元素指针的一个副本,因为不能用一个数组初始化另外一个数组,所以数组作为形参时,函数是不知道这个数组的元素个数,只知道数组地址。例如void test(int* a),编译器只知道a是指针,不知道a指向多少个元素,甚至根本不知道a是一个数组,如何解决呢,有两种方法:

    第一,增加一个参数表示元素个数,void test(int* a, int n)

    第二,传递数组的引用void test(int (&a)[5]),调用的时候必须要传递一个元素有5个的数组;

    展开全文
  • 一、声明、定义和初始化 ...三、引用数组和数组的引用之间的区别 首先,需要明确引用的概念,引用是对某个目标对象取了一个别名,对该引用的操作与对变量直接 操作的效果是一样的。 1、引用数组:字面意思...

    一、声明、定义和初始化

    1、声明:声明变量类型和名字
    2、定义:根据类型分配内存地址空间
    3、初始化:将初始值拷贝到变量的内存地址空间中

    二、为什么声明一个"引用"必须初始化?

    因为引用需要绑定到初始化对象,所以引用必须初始化

    三、引用的数组和数组的引用之间的区别

    首先,需要明确引用的概念,引用是对某个目标对象取了一个别名,对该引用的操作与对变量直接
    操作的效果是一样的。
    1、引用的数组:字面意思可以理解为定义一个数组,数组中存放的元素都是"引用",但这个明显
    就是不合法的,因为引用只是取了一个别名,本身并不占用内存,而数组是会占用内存的,所以引用的数组是错误的。
    示例:
    int array[2]={1, 2};
    int& a[] = array //可以理解为(int&) a[],即a为数组,数组中的元素为引用

    2、数组的引用:对数组名取一个别名
    int array[2]={1, 2};
    int (&a)[2]= array; //a为引用,引用对象为array
    a[0]=3;
    cout<<array[0]<<endl; //输出为3,对a中元素进行修改就是对array中的元素进行修改

    展开全文
  • 在《C++ Primer 第四版》的第七章中,讲到了通过引用传递数组,和其他类型一样,数组形参可声明为数组的引用。如果形参是数组引用,编译器不会将数组实参转化为指针,而是传递数组引用本身。在这种情况下,数组...

    在《C++ Primer 第四版》的第七章中,讲到了通过引用传递数组,和其他类型一样,数组形参可声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组大小成为形参与实参类型的一部分,编译器检查数组实参的大小与形参的大小是否匹配。

    #include <iostream>  
    using namespace std;  
    void output(int (&a)[5])  
    {  
        for(int i = 0; i < 5; i++)  
            cout<<a[i]<<endl;  
    }  
    int main()  
    {  
        int a[5]={0};  
        output(a);  
        getchar();  
        return 0;  
    }   

    输出结果为:
    也可以在函数中直接声明一个对数组的引用:

    #include <iostream>  
    using namespace std;  
    
    int main()  
    {  
        int a[5]={0};  
        int (&b)[5] = a;  
        for(int i = 0; i < 5; i++)  
            cout<<b[i]<<endl;  
        cout<<sizeof(b);  
        getchar();  
        return 0;  
    }   

    输出结果为:
    从运行结果中可以看到b的大小和数组a的大小一样,也为20。
    可见数组的引用同样可以看做是数组的一个别名。
    但如果将上面代码中的 int (&b)[5] = a; 改为 int &b[5] = a;则编译无法通过,因为声明了一个引用数组。即便你将引用数组b中的每一个元素b[i]看做对a[i]的引用,然后对每一个元素进行初始化,也是错误的:

     int &b[5] = {a[0],a[1],a[3],a[3],a[4]}; 

    一句话,你可以创建对数组的引用,但你不能创建一个元素都是引用的数组。

    附:引用占用内存空间吗?
    摘自http://topic.csdn.net/u/20090604/10/4d7d6b83-8477-4817-8bd0-b4c3e6df8e20.html
    引用是在汇编代码中是如何实现的,这要看编译器的实现,不过大数多编译器用指针来实现。但并不代码会为它分配空间。

    以下面程序为例:

    int ia =1;  
    int &ib = ia ;  
    int ic = 2 ;  
    printf("%p\n",&ia) ;  
    printf("%p\n",&ib) ;  
    printf("%p\n",&ic) ;   

    经编译器后,可以转换成如下的代码:

    int ia =1;  
    int *ib = &ia ;    //ib由引用变成指针  
    int ic = 2 ;  
    printf("%p\n",&ia) ;  
    printf("%p\n",ib) ;  //引用取地址=>指针本身就是地址  
    printf("%p\n",&ic) ;   

    这里为ib分配了一个空间,但由ib这个指针很特殊,在定义的时候一定要有初始化,这就为它的优化提供了很好的依据。
    上面的代码完全可以变成下面这样:

    int ia =1;  
    //int &ib = ia ; 编译只需记住ib是ia的引用,不需要分配空间  
    int ic = 2 ;  
    printf("%p\n",&ia) ;  
    printf("%p\n",&ia) ; //原来是printf("%p\n",&ib) ;ib即ia(引用定义),故直接用ia来替换  
    printf("%p\n",&ic) ;

    最后这个代码就没有为引用分配空间…… 如果标准没有规定这些行为,不同的编译器会有不同的行为。

    展开全文
  • 关于C++中的数组引用

    2018-08-31 18:26:29
    #include &lt;iostream&gt; void func(int (&amp;a)[7]) { ...... ...... } int main() { int a[] = {1,2,3,4,5,6,7};...数组引用,有点像数组指针------int (*a)[7],这里的a就是指向一...
    #include <iostream>
    
    void func(int (&a)[7])
    {
        ......
        ......   
    }
    
    
    int main()
    {
        int a[] = {1,2,3,4,5,6,7};
        func(a);
    
        return 0;
    }

    数组引用,有点像数组指针------int (*a)[7],这里的a就是指向一个有7个int型元素的数组,而如果将*改为&放到C++中就是一个数组引用了

    展开全文
  • 一、大概区别就像指针的数组和数组的指针一样耐人寻味//array首先向右结合,所以这个...结合,所以array是引用引用的对象是数组 //应该叫作数组引用 int (&amp;array)[10] 二、引用数组首先,可以明确的说...
  • 数组引用 定义一个4x3的数组: int arr[4][3] = { 0,11,22,33,44,55,66,77,88,1,2,3 }; 定义对数组的引用:ref是一个大小为3的数组,是对a[0]的引用; int(&amp;ref)[3] = arr[0]; 若想对整个arr引用,在定义...
  • Java中的数组引用赋值

    2019-09-20 18:06:44
    Java中的数组引用赋值 这里将以Java中的冒泡排序为例进行分析 引用赋值不是简单的赋值操作,而是能够通过对对象b进行赋值操作从而对对象a进行修改值的行为。 //这是一种简单的将数组n中的值对应赋给数组num int i; ...
  • c++ 数组引用

    2019-12-07 09:55:35
    一维数组合、二维数组引用的方式类似,直接看代码就好。 #include<iostream> using namespace std; int main() { //一维数组 int m[4] = { 1, 2, 3, 4 }; int(&a)[4](m); for (int i = 0; i<4; i+...
  • 数组引用类型引用类型和基本类型的区别 引用类型和基本类型的区别 引用类型:赋值,传递的是地址 里面的值都指向了同一个空间,都在堆内存中 基本类型:变量赋值,传递的是值 在栈内存保存数据,在堆内存中的...
  • 一、引用 int[] a = new int[10]; int[] b; b = a; 让数组b直接指向数组a(即b = a;),这样做的目的是为了提高程序运行的效率。 试想一下,假如数组中有上万个元素,在拷贝数组时,如果将数组a的所有元素都一一...
  • "数组引用"以避免"数组降阶"(本文曾贴于VCKBASE\C++论坛) 受[hpho]的一段模板函数的启发,特写此文,如有雷同,实在遗憾。 数组降阶是个讨厌的事,这在C语言中是个无法解决的问题,先看一段代码,了解什么是...
  • 传值、传指针、传引用的区别: 值传递,指针传递,当发生函数调用时,需要给形参分配空间,当传递的是对象是,要调用拷贝构造函数。 而且指针最后析构时,要处理内存释放问题。 引用传递,在内存中没有产生形参。...
  • 数组引用和引用数组

    2014-01-06 21:55:40
    #include int main(int argc, char *argv[]) { int a[5] = {1,2,3,4,5}; int (&b)[5] = a; //数组引用,给数组a[5]取别名b[5],正确 int &b[5] //引用数组,数组中的元素为引用,语法错误! ret
  • 一、大概区别 就像指针的数组和数组的指针一样耐人寻味 ...//array首先和&结合,所以array是引用引用的对象是数组 //应该叫作数组引用 int (&array)[10] 二、引用数组 首先,可以明确的说明,
  • int[] a={1,2,3} int[] b; b=a; 这的意思是a 和b指向的是同一块内存地址吗?
  • 引用数组与数组引用

    2012-04-06 09:50:35
    今天发现我在学习的过程中一直有一个问题理解错误,我一直认为引用数组与数组引用是一个概念,在学习的时候记得书上有这样一句话c++中没有引用数组,于是我认为也不存在数组引用,但是昨天晚上一个问题使我认识到我错了....
  • C++中能不能建立数组引用? 在网上看到一篇博客写到C++中不能建立数组引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。 ...
  • java8新特性—Lambda表达式 ...格式:   type(数组类型)::new @Test public void Test() { Function<Integer, String[]> fun1 = (x) ->new String[x]; //使用Lambda表达式 System.out...
  • function addElement(&$arr2,$school2) //数组是拷贝传值,数组作形参需要在前面加"&"符号,表示引用传参数。也可以在函数调用时,在实参前加"&"符号。 { $arr2[] = $school2; } $arr = array("张三","男",24); $...
1 2 3 4 5 ... 20
收藏数 738,062
精华内容 295,224
关键字:

数组的引用