形参为指针和引用的区别

img

img


想问一下最终都是能改变实参,这两种方法有什么区别,还是说没有区别,只是表达方式不同?

两者异曲同工。引用(前者)是C++特有的,C语言只能用指针。而C++又为了兼容C,保留了后者

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7596906
  • 你也可以参考下这篇文章:编程实现任意输入一个区间,输出其区间所有的素数,并输出区间素数个数
  • 除此之外, 这篇博客: 指针与引用的区别及指针的引用中的 一、指针和引用的定义和性质区别: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 指针是一个变量,存储的是一个地址,需要分配内存空间。引用只是变量的别名,不需要分配内存空间;
    2. 引用必须初始化,初始化后就不会再改变了。而指针可以是空值,可以初始化之后改变;
    3. 可以有const指针,但是没有const引用;
    4. 指针本身一个变量,引用不是对象,所以指针可以有多级,引用只能是一级(int **p;合法 而 int &&a是不合法的);
    5. ”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;
    6. 指针和引用的自增(++)运算意义不一样;
    7. 引用访问一个变量是直接访问,而指针访问一个变量是间接访问。
  • 您还可以看一下 尹成老师的区块链之Go语言设计模式课程中的 项目版本迭代小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    C++中的形参为指针和引用都可以在函数内部修改实参的值,但它们在语法上是有所不同的。

    指针是一个变量,存储了一个内存地址,可以通过这个内存地址访问实参所在的内存空间,使用指针作为形参时,需要在函数内部通过解引用操作来访问实参的值。可以通过指针修改实参的值,也可以将实参的值拷贝到另一个变量中进行修改,但需要注意指针为空指针的情况。

    引用是实参的别名,可以直接访问实参的值,使用引用作为形参时,不需要进行解引用操作,可以直接修改实参的值,修改后的值会直接反映到实参中。引用不能引用空值。

    为了展示两种方法的区别,我编写了下面的代码:

    #include <iostream>
    
    using namespace std;
    
    void pointerFunc(int* p){
        (*p)++;
    }
    
    void referenceFunc(int& r){
        r++;
    }
    
    int main(){
        int num = 10;
        int* ptr = &num;
        int& ref = num;
    
        pointerFunc(ptr);
        referenceFunc(ref);
    
        cout << num << endl;    //输出11,两种方法都可以修改实参的值
    
        pointerFunc(NULL);     //指针为空指针,会导致异常
        //referenceFunc(NULL);   //引用不能引用空值,会无法编译通过
    
        return 0;
    }
    

    总结一下,使用指针作为形参需要进行解引用操作,可以引用空值,使用引用作为形参不需要进行解引用操作,不能引用空值。两种方法都可以在函数内部修改实参的值。

可以参考下: https://ask.csdn.net/questions/7596906