鱼C论坛

 找回密码
 立即注册
查看: 2237|回复: 4

引用refernce

[复制链接]
发表于 2022-8-7 16:28:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引用起别名主要用作函数的参数,代替了指针,简化了操作,但是有人给数组起别名,是不是多此一举,数组名就是地址,用不着起别名吧,希望老师说一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-7 17:18:29 From FishC Mobile | 显示全部楼层
比如呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-7 18:06:03 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-8-7 18:07 编辑

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

  2. void swap(int *A, int *B) // 只能用指针传入值
  3. {
  4.         int C = *B;
  5.         *B = *A;
  6.         *A = C;
  7. }

  8. int main(void) {
  9.         int A = 13, B = 5;
  10.         swap(&A, &B); // <--------------- 注意这里 ---------------
  11.         printf("A: %d\n", A);
  12.         printf("B: %d\n", B);
  13. }
复制代码


C++
  1. #include <iostream>

  2. void swap(int &A, int &B) // 函数参数引用 &
  3. {
  4.         int C = B;
  5.         B = A;
  6.         A = C;
  7. }

  8. using std::cout, std::endl;
  9. int main(void) {
  10.         int A = 13, B = 5;
  11.         swap(A, B); // <--------------- 注意这里 ---------------
  12.         cout
  13.                 << "A: " << A << endl
  14.                 << "B: " << B << endl;
  15. }
复制代码





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

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

  8.         for (int i = 0; i < 3; ++i)
  9.         {
  10.                 for (int j = 0; j < 3; ++j)
  11.                 {
  12.                         printf("%d ", arr[i][j]);
  13.                 }
  14.         }
  15.         return 0;
  16. }
复制代码


C++
  1. #include <iostream>

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

  9.         for (auto& nums : arr) // <--------------- 注意这里,这里的 nums 就是数组引用
  10.         {
  11.                 for (int num : nums) // <--------------- 注意这里 ---------------
  12.                 {
  13.                         cout << num << " ";
  14.                 }
  15.         }
  16.         cout << endl;
  17.         return 0;
  18. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-8 09:55:37 | 显示全部楼层
很神奇,前面的可以理解,后面的没有找到相关的视频教程,可能我没有说明白,其实我的本意是这样的,有教程说:    arr[9]={1,2,3,4,5,6,7,8,9}; //定义数组    typedef int ARRAY[9];//给这种数组类型起名字
ARRAY &myarr=arr;//这样给数组arr起了一个别名myarr;我的意思是数组名本身就是地址,作为函数参数时可以直接使用,再起一个别名应该直接用数组名效果是一样的,没想到得到一种这样的表达方法,对老师实在是佩服,能不能给我说清楚一段最后面一段的意思,太神奇了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

C语言中的数组分两类:bounded array(已知常量大小数组)和unbounded array(未知大小数组)。(还有一个VLA支持程度不是很好,先不管它)
bounded array就是int[9]一类带大小的,像这样typedef int ARRAY[9]; ARRAY &myarr=arr;实际上就是数组引用。函数传参时无法传bounded array,只能传int xxx[]一类的unbounded array,只带有内存地址信息。所以它实际上是一种不完整类型,不能创建相对应的引用类型。具体可以看:https://zh.cppreference.com/w/c/language/array
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 00:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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