C++指针

时间:2019-09-09
本文章向大家介绍C++指针,主要包括C++指针使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

指针

是一种数据类型 用来指向一个变量的地址

int a=10;
    a=20;
    int b=100;
    int* p= &a;
    p=&b;
    printf("%p\n",&b);//%p表示指针 0x7ffee5633874
    //printf("%X\n",p);//p是一个地址,%X 16进制输出
    cout<<p;//0x7ffee5633874

 p是int*类型的,*p代表p地址的值,p代表着一个地址
通过指针修改变量的值

*p=200;
    printf("%d\n",b);//200
    printf("%d\n",*p);//200

sizeof()指针类型在内存中的大小

在64(32)位的机器里,无论什么类型的指针大小都是8(4)个字节,因为存的都是地址,内存地址都是无符号整型的。

cout<< sizeof(p)<<endl;//8
    cout<< sizeof(double*)<<endl;//8
    cout<< sizeof(short*)<<endl;//8
    cout<< sizeof(int*)<<endl;//8
    cout<< sizeof(char*)<<endl;//8
    cout<< sizeof(float*)<<endl;//8

野指针

是指向一个未知的内存空间,可能在读写的时候发生错误

指针变量也是变量,是变量就可以任意赋值,不要越界即可(64位机器 为8字节)

但是,任意数值赋值给指针变量没有意义,因为任意数值的地址可能时未知的(操作系统不允许操作此指针指向的内存区域),野指针不会直接引发错误,操作野指针指向的内存区域才会出问题。

int a=10;
    int* p=&a;
    //指向内存编号为0xff00的内存地址
    //内存0-255是系统保留的,不能读,也不能写
    p=0xff00;//该地址是未知的内容空间
    *p=100;
    printf("%d\n",*p);

空指针

就是指向内存编号为0 的空间,操作该内存空间会报错,一般情况空指针用于条件判断

int* p;
    p=NULL;
    *p=100;
    printf("%d\n",*p);
    if(p!=NULL)
    {
        //free();
    }

万能指针

int a=10;
    void* p=&a;
    *(int *)p=100;//将p强转成int*类型 再在前面加上*,就是取出p地址指向的值 ;再赋值,改变a的值
    cout<<a;//100
    //cout<<*p;//这样写不行,因为p还是void*类型
    cout<<*(int*)p;//100
int arr[10]={0};
    void* p=arr;
    *(int*)p=100;
    *((int*)p+4)=200;
    cout<<arr[0]<<" "<<arr[4];//100 200

(未完~待续~)

原文地址:https://www.cnblogs.com/zuiaimiusi/p/11494784.html