美文网首页
指针相关的问题

指针相关的问题

作者: JaromeHuang | 来源:发表于2016-07-05 10:38 被阅读18次

    指针p的加减法运算

    • 指针p + N
      • p里面存储的地址值 + N * 指针所指向类型的占用字节数
    • 指针p - N
      • p里面存储的地址值 - N * 指针所指向类型的占用字节数

    数组名

    • 存储的是数组首元素的地址
    • 等价于:一个指向数组首元素的指针
    • 数组名 + 1 的跨度:数组首元素的占用字节数

    其他结论

    • &num + 1的跨度:num的占用字节数

    int 是4个字节
    float 是8个字节
    例如:

    • 1
       int numbers[4] = {10, 20, 30, 40};     
        NSLog(@"%p %p", numbers, numbers + 1);
        NSLog(@"%p %p", &numbers, &numbers + 1);
    

    结果是

     0x7fff5fbff790 0x7fff5fbff794
     0x7fff5fbff790 0x7fff5fbff7a0
    

    原因:

    • numbers : 相当于&numbers[0],等价于指向numbers[0]的指针,所以numbers + 1 就相当于numbers【0】指针的地址+ numbers[0]类型数据是4个字节数,所以numbers,numbers+1 就是差别是4个字节

    • &numbers : 等价于指向numbers数组的指针(是整个数组的指针),整个数组的跨度的就是4个int 类型的就是16个字节,所以&numbers ,&numbers+1 就差16个字节的地址

    • 2

     int numbers[2][2] = {
                {10, 20}, 
                {11, 22} 
            };
      NSLog(@"%p %p", numbers[0], numbers[0] + 1);
       NSLog(@"%p %p", &numbers, &numbers + 1);
    

    结果是

    0x7fff5fbff790 0x7fff5fbff794
     0x7fff5fbff790 0x7fff5fbff7a0
    

    原因:

    • numbers[0] == &numbers[0][0],相当于是一个指向numbers[0][0]的指针(也就是是一个int 类型的指针),所以numbers[0] + 1,和numbers[0]才会差别4个字节的地址
    • &numbers : 等价于指向numbers数组的指针(是整个数组的指针),整个数组的跨度的就是4个int 类型的就是16个字节,所以&numbers ,&numbers+1 就差16个字节的地址

    相关文章

      网友评论

          本文标题:指针相关的问题

          本文链接:https://www.haomeiwen.com/subject/zashjttx.html