引用refernce
引用起别名主要用作函数的参数,代替了指针,简化了操作,但是有人给数组起别名,是不是多此一举,数组名就是地址,用不着起别名吧,希望老师说一下 比如呢 本帖最后由 傻眼貓咪 于 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;
} 很神奇,前面的可以理解,后面的没有找到相关的视频教程,可能我没有说明白,其实我的本意是这样的,有教程说: arr={1,2,3,4,5,6,7,8,9}; //定义数组 typedef int ARRAY;//给这种数组类型起名字
ARRAY &myarr=arr;//这样给数组arr起了一个别名myarr;我的意思是数组名本身就是地址,作为函数参数时可以直接使用,再起一个别名应该直接用数组名效果是一样的,没想到得到一种这样的表达方法,对老师实在是佩服,能不能给我说清楚一段最后面一段的意思,太神奇了。 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]