C++中引用,指针和数组的比较

本文详细解析了C++中引用、指针和数组的概念与使用方法,对比了它们之间的区别,并介绍了如何在函数参数传递中选择合适的方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中引用,指针和数组的比较


引用是c++中的概念,

intvar;

int&ref= var;

以上代码中,refvar的引用,var是被引用物,ref相当于var的别名,对ref的任何操作就是对var的操作,所以ref既不是var的拷贝,也不是指向var的指针,其实ref就是var它自己。

引用的一些规则:

1)引用被创建的同时必须被初始化(指针可以在任何时候被初始化)。

2)不能有Null引用,引用必须与合法的存储单元关联(指针则可以是null)。

3)一旦引用被初始化,就不能改变引用的关系(指针可以随时改变所指向的对象)。

inti= 100

intj=200

int&k= i

k=j//ki的值都变成了200

语句k=j并不能将k修改成j的引用,只是把k的值改变成200,由于k是i的引用,i的值也被改成了200.

引用的主要功能是传递函数的参数和返回值。传递函数参数和返回值的方式有三种:值传递,指针传递,引用传递。

在值传递的程序中:

voidfuncValue(int x){

x=x + 10;

}

 

intn=0;

funcValue(n);

funcValue中的x是外部变量n的一份拷贝,改变x的值不会影响到n,所以n的值仍然是0

 

指针传递的程序:

voidfuncPointer(int*x){

(*x)=(*x) + 10;

}

intn=0;

funcPointer(&n);

funcPointer中的x是指向外部变量n的指针,改变该指针的内容就导致n的值改变,所以n变成了10.

 

引用传递的程序:

voidfuncRef(int&x){

x=x+10;

}

intn=0;

funcRef(n);

funcRef中的x是外部变量n的引用,xn是同一个东西,改变x等于改变n

 

引用能做的事情,指针都能做,只是引用更安全。因为指针可以毫无约束的去操作内存的任何东西,很危险。


指针和数组很多地方可以互相替换。

数组可能在静态存储区被被创建,也可能在栈上被创建(比如函数内的数组变量),数组名对应一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。

指针可以随时指向任意类型的内存块,特点就是“可变”,所以常用指针来操作动态内存(也即是堆上分配的内存)。

char arry[]="abcd";

arry[0] ='A'; //可以通过下标索引修改数组的内容

char *pt="abcd";

pt[0]='A';//这个操作会引起运行异常,指针虽然可以通过下标访问内容,但是不能修改内容,因为pt指向的是一个常量字符串。


当数组作为函数参数进行传递时,该数组自动退化为同类型的指针。

void func(char a[10]){

    cout << sizeof(a) <<endl;

//计算出来的容量是4个字节,而不是10个字节,因为这里得到的是一个指针变量的字节数,指针保持的是地址值,相当于一个init型变量,

在 32 位机器上,一个int型变量占4个字节

}

而char arry[]="123456789";

sizeof(array) = 10;这里计算数组的容量是10个字节,其中包括末尾的‘\0’。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值