基础知识拾遗

理解C语言取地址符&

2017-04-17  本文已影响70人  XX像条狗

&的两个常用地方

C语言取地址符&的有两个常用的地方。
一个是,为指针变量赋值的时候

int m = 214;
int *i = &m;

第二个是,在函数的形式参数中出现在形参变量的前面

void func(int* &i)
{
}

概念混淆

上述第一个概念,比较明确,取地址赋给指针型变量。
但是在学习数据结构写算法的时候,常会用到上面第二种情况,当指针类型和&符号在一起使用的时候,我变得很迷茫,一时搞不清这个符号到底是什么意思,实参该传什么呢? 指针变量还是取地址?

理解

实际上,当&在形参中出现的时候,只是表明这个函数的参数是引用传递而已(不必纠结它的取地址符含义)。同时在实际传参的时候,该传什么类型还是传什么类型。之所以,产生混淆,就是因为*和&同时出现在了参数列表中,没有理解指针其实不过也是一种特殊的类型而已, &只是用来表明这是一次引用传递。

引用传递和非引用传递的一个区别:
引用传递的时候,函数调用时的实参可以不用初始化。但是非引用传递的时候,实参必须初始化,否则在运行时会报错。

void func (int &i) 
{
}
func(214); // 形参中的&表明是一次引用传递。参数类型是整形
 
void func(int * &i)
{
}
int * i;
func(i); // 参数类型是指针型而已。 传入的参数也应该是指针类型,可以不用初始化


void func(int * i)
{
}
int *i;
func(i); // 运行时报错!!(根据形参形式,表明非引用传递,函数调用时,变量需要提前初始化。)
上一篇下一篇

猜你喜欢

热点阅读