我是靠谱客的博主 落寞夏天,最近开发中收集的这篇文章主要介绍引用&指针&const1. malloc 和new 的区别2. 把const 加在指针不同的位置是否有区别;3. const(只读)4. 引用和指针的区别5. 函数传入值参数和传入引用参数有什么区别6. 函数返回是引用和非引用的区别7. 什么时候需要为传入的引用参数加上const8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 1. malloc 和new 的区别
  • 2. 把const 加在指针不同的位置是否有区别;
  • 3. const(只读)
  • 4. 引用和指针的区别
  • 5. 函数传入值参数和传入引用参数有什么区别
  • 6. 函数返回是引用和非引用的区别
  • 7. 什么时候需要为传入的引用参数加上const
  • 8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?

1. malloc 和new 的区别

mallocnew
属性C库函数C++运算符
返回类型失败返回NULL,成功返回申请内存的首地址void*类型(需要强制类型转换)失败抛出异常bad_alloc,成功返回对象类型的指针
内存分配需要显式指定内存分配的字节数编译器根据类型,自动分配对象大小的内存空间(会调用malloc),自动调用类对象的构造函数,对类对象进行初始化
释放内存freedelete—调用类的析构函数,调用operator delete函数,调用free函数

2. 把const 加在指针不同的位置是否有区别;

  • const在解引用符号的左边,那么不能通过这个指针来修改指向的内存,但是指针的指向是可以修改的
  • const在解引用符号的右边,那么可以通过这个指针来修改指向的内存,但是指针的指向是不可以修改的

3. const(只读)

对于任何不修改数据成员的函数都应该声明为const成员函数,提高程序可靠性。
不允许把一个const对象的地址赋给一个指向非const对象的指针(不能给修改的机会,可修改的可以给只读,但只读的不能给可修改的)。

  • const 数据成员
    在类的成员函数里都只能调用它,不能改变它。

  • const 成员函数
    const改变了this的类型,变为指向const对象的指针(所以static 成员函数不能声明为const,因为static成员函数没有this指针给const作转换)。不能修改调用该函数的对象,即只能使用对象的数据成员,不能修改这些数据成员。
    在声明和定义的时候都必须加const,调用时不用加。

    int A::get_data(void) const {//const 成员函数
    return m_data;
    }
    //===》》
    int A::get_data(const A* const this) const {
    return m_data;
    }
    
  • const 对象
    const对象只能调用const成员函数,不能调用非const成员函数。

#include <iostream>
using namespace std;
class A{
private:
int m_data;
const char m_sex;//const 数据成员
public:
A(int data = 0, char sex = 'm'):m_data(data), m_sex(sex){}
void set_data(int data){
m_data = data;
return ;
}
int get_data(void) const {//const 成员函数
return m_data;
}
char get_sex(void) const {
return m_sex;
}
void print() const {
cout << "m_data=" << get_data() << endl;
cout << "m_sex=" <<
get_sex() << endl;
return ;
}
};
int main(void){
A a;
a.print();
cout << "change data from 0 to 5" << endl;
a.set_data(5);
a.print();
const A aa;//const 对象
aa.print();
return 0;
}

4. 引用和指针的区别

  • 引用的本质是指针常量(用的时候理解成别名或者说本体,别管指针),如下

  • int a = 10;
    int &p = a;
    /*====>底层原理:int *const p = &a; p的值初始化之后不可修改,也就是指针指向不可改,也就是引用不可更改,只能绑定一次。*/
    p = 11;
    /*
    *p = 11;编译器发现p是引用,自动给p解引用。
    */
    

5. 函数传入值参数和传入引用参数有什么区别

  • 传入值参数,形参要复制一份实参
  • 传入引用参数,函数可以直接访问实参对象,无需复制。

6. 函数返回是引用和非引用的区别

  • 函数返回是非引用类型
    #include <iostream>
    int add(int a, int b){
    int sum;
    sum = a + b;
    return sum;
    }
    int main()
    {
    int s;
    s = add(1, 1); //int temp = sum;s = temp;//函数调用处产生的临时对象temp接住函数的返回值
    return 0;
    }
    
  • 函数返回引用类型时,不会复制返回值,返回的是对象本身。
    #include <iostream>
    int& add(int a, int b){
    int sum;
    sum = a + b;
    return sum;
    }
    int main()
    {
    int s = add(1, 1);//理解成s接住sum本体的值
    int &ss = add(1, 1);//理解成ss就是sum本体
    return 0;
    }
    

7. 什么时候需要为传入的引用参数加上const

  • 不会修改所引用的对象

8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?

  • 如果没有标明成员函数或者成员变量的访问权限级别,在struct
    中默认的是public, 而在class 中默认的是private.

最后

以上就是落寞夏天为你收集整理的引用&指针&const1. malloc 和new 的区别2. 把const 加在指针不同的位置是否有区别;3. const(只读)4. 引用和指针的区别5. 函数传入值参数和传入引用参数有什么区别6. 函数返回是引用和非引用的区别7. 什么时候需要为传入的引用参数加上const8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?的全部内容,希望文章能够帮你解决引用&指针&const1. malloc 和new 的区别2. 把const 加在指针不同的位置是否有区别;3. const(只读)4. 引用和指针的区别5. 函数传入值参数和传入引用参数有什么区别6. 函数返回是引用和非引用的区别7. 什么时候需要为传入的引用参数加上const8. C++中可以用struct 和class 来定义类型. 这两种类型有什么区别?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部