精华内容
下载资源
问答
  • C++指针和引用的区别

    2020-12-17 18:40:48
    #C++指针和引用的区别 1. 指针和引用的定义和性质区别 指针:本质是变量,这个变量存储的是指向存储单元的地址, 需要分配空间。 引用只是变量的别名,不需要分配空间。 指针在定义的时候不一定要初始化,并且...

    #C++指针和引用的区别

    1. 指针和引用的定义和性质区别

    1. 指针:本质是变量,这个变量存储的是指向存储单元的地址, 需要分配空间。
      引用只是变量的别名,不需要分配空间。

    2. 指针在定义的时候不一定要初始化,并且指向的空间可变;
      引用定义的时候必须初始化,并且不能改变(引用的值不能为NULL)。

    3. 有多级指针,无多级引用;有const指针,无const引用。

    4. 指针的自增为指向下一个空间,而引用是引用的变量加1

    5. sizeof引用是变量(对象)的大小,而sizeof指针是指针本身的大小。

    6. 引用访问一个变量时直接访问,而指针是间接访问。

    7. 作为参数传递时,指针是传值,传递的是指针的地址;传引用是传地址,传递的是变量的地址。

    2.指针和引用作为函数参数进行传递时的区别

    1. 指针参数传递本质上是值传递,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。
      
    2. 引用参数传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参(本体)的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量(根据别名找到主调函数中的本体)。因此,被调函数对形参的任何操作都会影响主调函数中的实参变量。
    3. 引用传递和指针传递是不同的,虽然他们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将应用不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量(地址),那就得使用指向指针的指针或者指针引用。
    #include <iostream>
    using namespace std;
    
    //通过改变指向的内容来改变实参的值
    void swap1(int *p, int *q)
    {
    	int tmp = *p;
    	*p = *q;
    	*q = tmp;
    }
    //通过间接寻址,改变是实参的值
    void swap2(int &p, int &q)
    {
    	int t = p;
    	p = q;
    	q = t;
    }
    //无法改变形参的值
    void swap3(int *p, int *q)
    {
    	int *t = p;
    	p = q;
    	q = t;
    }
    
    void main()
    {
    	int a = 10, b = 5;
    	std::cout << "a = " << a << "	b = " << b << std::endl;
    	swap1(&a, &b);
    	std::cout << "a = " << a << "	b = " << b << std::endl;
    	swap2(a, b);
    	std::cout << "a = " << a << "	b = " << b << std::endl;
    	swap3(&a, &b);
    	std::cout << "a = " << a << "	b = " << b << std::endl;
    	std::cin.get();
    }
    

    输出结果
    在这里插入图片描述

    展开全文
  • C++ 指针和引用的区别

    2021-01-20 03:34:04
     在C++中,指针和引用经常用于函数参数传递,然而,指针传递参数和引用传递参数是有本质上不同:  指针传递参数本质上是值传递方式,它所传递是一个地址值。  值传递过程中,被调函数形式参数作为...
  • c++指针和引用的区别

    2019-10-07 23:42:04
    c++中,指针和引用开起来不大一样,但他们却实现类似功能,无论指针还是引用,都使你间接使用其他对象,那么他们有什么区别呢,又在何时使用他们呢? 首先,要记住,引用是不可以为空,也就是没有NULL ...

    c++中,指针和引用开起来不大一样,但他们却实现类似的功能,无论指针还是引用,都使你间接使用其他对象,那么他们有什么区别呢,又在何时使用他们呢?

    首先,要记住,引用是不可以为空的,也就是没有NULL REFERENCE,引用必须指向某个对象,所以引用在使用时必须初始化。

    指针可以指向为空,例如可以有以下代码:

    int *pi = NULL;

    有人可能会问,那下面的代码怎么解释呢:

    char *pc = NULL;
    char& rc = *pc;

    这段代码的行为是未定义的,当然也不应该是一个脑子正常的程序员写出来的。

    因为引用不可以为NULL,所以使用时可以不用测试其是否为空,效率可能会高些。

    另外,引用只能指向一个对象,不可以改变引用所指向的对象;而指针指向的对象则可以改变,例如下面代码:

    string s1("cat");
    string s2("dog");
    string& rs = s1; // rs代表s1
    string *ps = &s1; // ps指向s1
    rs = s2; // rs仍然代表s1,不过s1为dog
    ps = &s2; // ps指向s2

    所以,当“总是会代表某个对象”,而且“一旦代表了就不能再改变”,就应该使用引用。

    还用一种常见的情况需要使用引用,就是operator[],他需要返回一个可以被赋值的东西,例如:

    vector<int> v(10);
    v[5] = 10;

    如果operator[]返回指针,上面的第二句就要写成 *v[5] = 10,这看起来像vector中装的是指针,所以,根据此原因应该返回引用。

    关于何时使用引用,何时使用指针,总结如下:当你需要指向某个东西,而且绝不会改变指向其他的东西,或者实现一个操作符而其语法需求无法有指针实现是,使用引用;除此之外,使用指针。


    转载于:https://www.cnblogs.com/rowsy/archive/2012/09/10/2838782.html

    展开全文
  • c++ 指针和引用的区别

    2018-08-21 16:00:06
    指针和引用的相同点和不同点: ★相同点: ●都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。 ★不同点: ●指针是一个实体,而引用仅是个别名; ●引用只能在定义...

    参考链接:https://www.cnblogs.com/dingxiaoqiang/p/8012578.html

    指针和引用的相同点和不同点:

    ★相同点:

    ●都是地址的概念;

    指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。

    ★不同点:

    ●指针是一个实体,而引用仅是个别名;

    ●引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;

    ●引用没有const,指针有const,const的指针不可变;(具体指没有int& const a这种形式,而const int& a是有     的,  前者指引用本身即别名不可以改变,这是当然的,所以不需要这种形式,后者指引用所指的值不可以改变)

    ●引用不能为空,指针可以为空;

    ●“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小;

    ●指针和引用的自增(++)运算意义不一样;

    ●引用是类型安全的,而指针不是 (引用比指针多了类型检查)

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,532
精华内容 1,412
关键字:

c++指针和引用的区别

c++ 订阅