&的两个常用地方
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); // 运行时报错!!(根据形参形式,表明非引用传递,函数调用时,变量需要提前初始化。)
网友评论