• 指针类型的意义


    指针类型的意义:

    1、指针类型决定了指针解引用操作时能够访问内存空间的大小;

    举例:

    1. #include <stdio.h>
    2. int main()
    3. {
    4. int a = 0x22334455; //16进制
    5. //int* p = &a; //int*为指针类型
    6. //*p = 0;
    7. char* p1 = &a; //指针类型为char*
    8. *p1 = 0;
    9. /*printf("%p\n", p);
    10. printf("%p\n", p1);*/
    11. return 0;
    12. }

     char* p1:  *p1能够访问1个字节的内存空间;

    short* p:    *p能够访问2个字节;
      int* p:       *p能够访问4个字节;

    double* p:  *p能够访问8个字节;

      char* p1:  *p1能够访问1个字节的内存空间;图解如下:

     

     2、指针+ - 整数

    指针类型决定了指针向前或者向后移动了多大的距离(步长),单位:字节;

    char* p:         p+1移动一个字节;

    int* p:            p+1移动4个字节;

    double* p:     p+1移动8个字节;

     举例:

    1. int main()
    2. {
    3. int a = 0x123123; // 0x12312316进制刚好是8个字节
    4. int* p1 = &a;
    5. char* p2 = &a;
    6. printf("%p\n", p1);
    7. printf("%p\n", p1 + 1);//int*类型:p+1向后移动4个字节
    8. printf("%p\n", p2);
    9. printf("%p\n", p2 + 2);//char*类型:p+2向后移动2个字节
    10. return 0;
    11. }

     图解如下:

    3、通过指针改变数组元素的值: 

    举例:

    1. #include <stdio.h>
    2. int main()
    3. {
    4. int arr[10] = { 0 };
    5. int* p = arr; //arr是数组名,p指向数组元素的首地址
    6. int i = 0;
    7. for (i = 0; i < 10; i++)
    8. {
    9. *(p + i) = 1;
    10. printf("%d ", arr[i]);
    11. }
    12. return 0;
    13. }

     执行结果如下:

     

     4、野指针(随机值,不确定的值);

    导致野指针的三种情况:

    指针未初始化导致野指针;

    指针越界导致野指针;

    指针指向的空间被释放了,导致野指针;

    指针未初始化导致野指针; 举例如下:

    int main()
    {
        int a;      //局部变量不初始化,默认值是随机值
        //int* p;  //局部指针变量不初始化,默认值就是随机值,这种情况是不允许的;

        //*p =10; 
        return 0;

    指针越界导致野指针; 举例如下:

    int main()
    {
        int a[5] = { 0 };
        int* p = &a;
        int i = 0;
        for (i = 0; i < 8; i++)
        {
            //*(p+i) = 1;  //当i=6,7,8时,指针超出了数组a的范围,越界了,这种情况是不允许的;
        }
        return 0;
    }

    指针指向的空间被释放了,导致野指针;举例如下:

    int* test()
    {
        //进入test函数后,系统给int a分配内存地址,
        //但是出了函数后,int a的地址被销毁了
        int a = 2;
        return &a;
    }
    int main()
    {
        //进入test函数后,系统给int a分配内存地址,
        int* p = test();

        //但是出了函数后,int a的地址被销毁了,导致*p的地址随机,变成野指针
        *p = 8; 
        return 0;
    }

  • 相关阅读:
    解决安装 WP Super Cache 插件提示 Advanced-Cache.Php 是另一个插件创建的
    matlab实验数据处理
    网络安全攻击的常见类型
    win11打开方式没有始终,例如pptx应该用power point打开
    ASSIST-GAI全色域指数计算工具
    Mac电脑强大的字体管理 RightFont for Mac
    【C++】之多态最最最详细讲
    “数智芯生,云端共创”,利尔达精彩亮相第十八届国际物联网展
    CesiumJS 2022^ 源码解读[7] - 3DTiles 的请求、加载处理流程解析
    专业吃鸡行家揭秘:游戏战斗力提升,作战干货分享!
  • 原文地址:https://blog.csdn.net/xiaojiamide/article/details/126960631