• c语言指针加减法


    c语言指针加减法

    下面代码会输出什么()

    int main(int argc, char **argv)
    {
        int a[4] = {1, 2, 3, 4};
        int *ptr = (int *)(&a + 1);
        printf("%d", *(ptr - 1));
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    选项有1,2,3,4。

    解析

    答案为4。我们打印一下内存地址

    void test7() {
    
            int a[4] = { 1, 2, 3, 4 };
            printf("a     = %p\n\n", a);
    
            int* ptr = (int*)(&a + 1);
            printf("ptr   = %p\n", ptr);
            printf("ptr+1 = %p\n", ptr+1);
            printf("ptr+2 = %p\n\n", ptr+2);
    
            printf("*(ptr - 1) = %d\n", *(ptr - 1));
            printf("*(ptr - 2) = %d\n", *(ptr - 2));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    输出

    a     = 00BAF800
    
    ptr   = 00BAF810
    ptr+1 = 00BAF814
    ptr+2 = 00BAF818
    
    *(ptr - 1) = 4
    *(ptr - 2) = 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里的00BAF800为16进制数,所以00BAF81000BAF800多了一个10,意思就是16进一,所以&a + 1其实是走了16步(这里十进制里的16步哦)。
    ptr的内存地址为00BAF810ptr+1的内存地址为00BAF814,走了4步(这里十进制里的4步哦)。为什么走了四步?因为int类型为4字节。

    参考-整数类型

    下表列出了关于标准整数类型的存储大小和值范围的细节:

    类型存储大小值范围
    char1 字节-128 到 127 或 0 到 255
    unsigned char1 字节0 到 255
    signed char1 字节-128 到 127
    int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
    unsigned int2 或 4 字节0 到 65,535 或 0 到 4,294,967,295
    short2 字节-32,768 到 32,767
    unsigned short2 字节0 到 65,535
    long4 字节-2,147,483,648 到 2,147,483,647
    unsigned long4 字节0 到 4,294,967,295

    注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。

    以下列出了32位系统与64位系统的存储大小的差别(windows 相同):
    在这里插入图片描述
    可以看到int类型为4字节。
    为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。下面的实例演示了获取 int 类型的大小:

    #include 
    #include 
     
    int main()
    {
       printf("int 存储大小 : %lu \n", sizeof(int));
       
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    参考-资料

    C 数据类型
    C语言指针变量的运算(加法、减法和比较运算)

  • 相关阅读:
    【SpringMVC】实现增删改查(附源码)
    在VB类模块中使用计时器
    JavaScript逆向循环和嵌套循环
    k8s搭建pinpoint链路追踪
    5分钟快速搭建k8s集群1.29.x
    36 数据增广【李沐动手学深度学习v2课程笔记】
    一些好玩的小游戏
    pytorch yolov5 训练自定义数据
    pdf在线工具
    QT影城网上售票系统
  • 原文地址:https://blog.csdn.net/e891377/article/details/127718844