没有合适的资源?快使用搜索试试~ 我知道了~
首页C++引用&和指针在作为形参时的区别
资源详情
资源评论
资源推荐

C++引用&和指针在作为形参时的区别
int n;
int &m = n;
在 C++中,多了一个 C 语言没有的引用声明符&,如上,m 就是 n 的引用,简单的说 m 就是 n 的别名,两
者在内存中占同样的位置,不对 m 开辟新的内存空间,对 m 的任何操作,对 n 来说是一样的。
对于引用,有以下三条规则:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有 NULL 引用,引用必须与合法的存储单元关联(指针则可以是 NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
假如在一个函数中动态申请内存空间,用指针和用引用作形参会得到不同的结果,如下面的例子:
void fun(int* b){ //用指针做形参
b = (int*)malloc(sizeof(int)*3);
for(int i=0; i<3; i++){
a[i] = i;
}
}
void fun(int* &b){//用引用做形参
b = (int*)malloc(sizeof(int)*3);
for(int i=0; i<3; i++){
b[i] = i;
}
}
如果在 main 函数中定义了一个 int 型的空指针并分别作为实参传入,如下:
int main(){
int *a = NULL;
fun(a);
for(int i=0; i<3; i++){
cout << a[i] << " ";
}
cout << "";
return 0;
}
结果用指针的函数会出现内存访问出错,用引用的函数则运行正常并正确输出 1 2 3.
这是因为:
1.指针虽然是地址传递,但实际上也是在函数中又定义了一个新的指针让其与传入的指针指向同一地址。
但两个指针本身作为变量在内存中的存放地址是不同的,就是说这是两个不同的变量,只是内容(即所指
地址)相同。















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0