C++基础知识记录---重新认识指针

C++基础知识记录---重新认识指针

1》一句话理解

Fistly ---先看一个示例:int *p = &i;//分开看,p=&i;  

                                          指针变量p中存着i的内存地址, 加入星号的*p(代表指针了)是通过地址映射到确切的值

                                           int :代表指针指向数值的类型

Secondly---举形象化的例子:快递员上门给我送快递,手中拿的地址(即指针变量p)  eg:几号楼几单元101 ,按地址找到我家中具体的人(我,也是变量i ;也是*p),这里的*p可以理解成映射到人,也可以理解成按地址索骥找到的人

总之,p指针变量,存地址;*p映射到的变量值;

                                              

2》指针的释放

------内存释放的小窍门

        可以有效的避免因为忘记对指针进行置空而出现各种内存问题。两种方法:

                     a)自定义一个内存释放函数,传入参数是指针的地址,在这个函数里面置空

                     b)定义FREE宏,在宏里面对他进行置空。

                         注---void的意思是空,但是void指针的意思,可不是空指针的意思

                                 void指针实际上的意思是指向任意类型的指针

a)内存释放函数

#include<iostream>
using namespace std;
void my_free(void *p){
    void **tp = (void **)p;//定义一个指向指针地址的指针,即指向p中的地址
    //将传进来的指针的地址给中间定义的指针的指针tp
    if (NULL == *tp)//可以这么理解上面的void **tp =(void *)*tp
        //地址为空,即实际操作中出现free(p)/delete(p)
        return;//直接返回,意味已经实现了free等操作
    free(*tp);//将新申请的临时指针变量释放
    *tp = NULL;//释放的同时让其为空,否则成为了野指针
    
}
int main(){
    int *p = new int;
    *p = 1;//将值映射
    cout << p << endl;//输出1的地址
    my_free(&p);//释放p的地址    
    //my_free调用了之后,p的值就变成了0(NULL),调用多少次free都不会报错了!
    //free(NULL)当然没错
    cout << p << endl;//p=NULL,即p=0;此时应该输出为0;
    free(p);//释放

    //p = NULL;//测试用p的地址在free之后成为野指针,此时p=NULL, 从头开始
    //free(p);
    //free(NULL);//测试用 free(NULL)当然没错
    return 0;
}
main.cpp

b)定义FREE宏

#include<iostream>
using namespace std;
#define FREE(x) if(x) free(x);x=NULL
int main(){
    int *p = new int;
    *p = 1;//将值映射
    cout << p << endl;//输出1的地址
    FREE(p);//释放p的地址    
    //my_free调用了之后,p的值就变成了0(NULL),调用多少次free都不会报错了!
    //free(NULL)当然没错
    cout << p << endl;//p=NULL,即p=0;此时应该输出为0;
    free(p);//释放之后就不能写入内存了,所以一般free放在最后
    p = NULL;
    free(p);
    //free(NULL);//free(NULL)当然没错
    return 0;
}
main.cpp

 

3》const定义的指针等内容

 

 

参考链接 :http://www.cnblogs.com/bluewelkin/p/4059840.html  作者资深的实战专家,对于指针应用非常了然

                    函数指针还没看,一定补上

 

posted @ 2017-08-08 01:21  心沉大海-汇聚成一  阅读(136)  评论(0)    收藏  举报