您的位置:首页 > 编程语言 > C语言/C++

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

2017-10-17 06:48 281 查看
C++中引用,指针和数组的比较

引用是c++中的概念,

intvar;

int&ref= var;

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

引用的一些规则:

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

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

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

inti= 100;

intj=200;

int&k= i;

k=j;//k和i的值都变成了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<
c8eb
/span>的引用,x和n是同一个东西,改变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’。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: