我是靠谱客的博主 落寞夏天,这篇文章主要介绍引用&指针&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,调用时不用加。

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    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成员函数。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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. 引用和指针的区别

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

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

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

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

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

  • 函数返回是非引用类型
    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #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; }
  • 函数返回引用类型时,不会复制返回值,返回的是对象本身。
    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #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.内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部