hongdouhong 发表于 2022-8-7 16:28:07

引用refernce

引用起别名主要用作函数的参数,代替了指针,简化了操作,但是有人给数组起别名,是不是多此一举,数组名就是地址,用不着起别名吧,希望老师说一下

wp231957 发表于 2022-8-7 17:18:29

比如呢

傻眼貓咪 发表于 2022-8-7 18:06:03

本帖最后由 傻眼貓咪 于 2022-8-7 18:07 编辑

例子 1:
C#include <stdio.h>

void swap(int *A, int *B) // 只能用指针传入值
{
        int C = *B;
        *B = *A;
        *A = C;
}

int main(void) {
        int A = 13, B = 5;
        swap(&A, &B); // <--------------- 注意这里 ---------------
        printf("A: %d\n", A);
        printf("B: %d\n", B);
}

C++#include <iostream>

void swap(int &A, int &B) // 函数参数引用 &
{
        int C = B;
        B = A;
        A = C;
}

using std::cout, std::endl;
int main(void) {
        int A = 13, B = 5;
        swap(A, B); // <--------------- 注意这里 ---------------
        cout
                << "A: " << A << endl
                << "B: " << B << endl;
}



例子 2:
C#include <stdio.h>

int main(void) {
        int arr = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };

        for (int i = 0; i < 3; ++i)
        {
                for (int j = 0; j < 3; ++j)
                {
                        printf("%d ", arr);
                }
        }
        return 0;
}

C++#include <iostream>

using std::cout, std::endl;
int main(void) {
        int arr = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };

        for (auto& nums : arr) // <--------------- 注意这里,这里的 nums 就是数组引用
        {
                for (int num : nums) // <--------------- 注意这里 ---------------
                {
                        cout << num << " ";
                }
        }
        cout << endl;
        return 0;
}

hongdouhong 发表于 2022-8-8 09:55:37

很神奇,前面的可以理解,后面的没有找到相关的视频教程,可能我没有说明白,其实我的本意是这样的,有教程说:    arr={1,2,3,4,5,6,7,8,9}; //定义数组    typedef int ARRAY;//给这种数组类型起名字
ARRAY &myarr=arr;//这样给数组arr起了一个别名myarr;我的意思是数组名本身就是地址,作为函数参数时可以直接使用,再起一个别名应该直接用数组名效果是一样的,没想到得到一种这样的表达方法,对老师实在是佩服,能不能给我说清楚一段最后面一段的意思,太神奇了。

lhgzbxhz 发表于 2022-8-11 14:01:13

hongdouhong 发表于 2022-8-8 09:55
很神奇,前面的可以理解,后面的没有找到相关的视频教程,可能我没有说明白,其实我的本意是这样的,有教程 ...

C语言中的数组分两类:bounded array(已知常量大小数组)和unbounded array(未知大小数组)。(还有一个VLA支持程度不是很好,先不管它)
bounded array就是int一类带大小的,像这样typedef int ARRAY; ARRAY &myarr=arr;实际上就是数组引用。函数传参时无法传bounded array,只能传int xxx[]一类的unbounded array,只带有内存地址信息。所以它实际上是一种不完整类型,不能创建相对应的引用类型。具体可以看:https://zh.cppreference.com/w/c/language/array
页: [1]
查看完整版本: 引用refernce