指针

C++内存分布,堆区和栈区,函数调用栈

1.对给定类型添加一层指针,移除给定类型的一层指针

std::add_pointer和std::remove_pointer

指针常量与常量指针

const int*
int* const

2.指针函数与函数指针

函数指针与回调函数

仿函数:std::function

3.函数返回局部变量,裸指针,智能指针

对于函数返回局部变量的场景,若该局部变量是值,则没有问题
22

当函数返回一个局部变量的指针问题,内存是否被释放

函数返回局部变量/局部指针

函数不能返回智能指针,因为智能指针只在函数内部有效,当智能指针超出其作用域时,该变量将被清除,从而导致指针无效。

4.示例代码

#include<iostream>

using namespace std;

int main()
{
    /*
    指针就是地址
    用来存储地址的变量称为指针变量
    int* p;   //*是为了说明p是一个指针

    声明变量的语法:类型 变量名   
    因此去掉变量名后就是变量的类型,即int* p; 指针p的类型是int*
    指针变量指向的类型:对应地址存储的数据类型
    int* p;  去掉变量名和*就是指向的数据类型
    */
    cout << sizeof(int*) << "\t" << sizeof(char*) << "\t" 
          << sizeof(int) << "\t" << sizeof(char) << endl;  // 4 4 4 1

    int* p = nullptr;
    cout << p<<endl;
    int i = 0;
    p = &i;
    cout << p<<endl;
    cout << *p << endl;
    *p = 10;
    cout << *p;

    //数组
    int arr[] = { 1, 2,3,4,5 };
    cout << arr << "\t" << *arr<<"\t"<<;

    return 0;
    
}
posted @ 2021-01-23 23:55  滴哒哒哒  阅读(5)  评论(0编辑  收藏  举报