美文网首页基础知识拾遗
理解C语言取地址符&

理解C语言取地址符&

作者: XX像条狗 | 来源:发表于2017-04-17 16:52 被阅读70次

    &的两个常用地方

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

    相关文章

      网友评论

        本文标题:理解C语言取地址符&

        本文链接:https://www.haomeiwen.com/subject/thitzttx.html