秋栈博客

七月

指针偏移遍历数组注意事项

2
2021-11-04
先看以下代码
#include 
int main()
{
    int arr[6] = {7, 34, 56, 23, 78, 90};
    int *p;
    p = arr;   //指向首地址
    for (int i = 0; i < 6; i++)
    {
        printf("地址:0x%p,%d ", p + i, *(p + i));
    }
    return 0;
}
运行结果: 地址:0x0x16d8b3410,7 地址:0x0x16d8b3414,34 地址:0x0x16d8b3418,56 地址:0x0x16d8b341c,23 地址:0x0x16d8b3420,78 地址:0x0x16d8b3424,90 我们可以看到,指针每次跳跃4个地址。 在C语言中,每个地址实际上指向一个8bit的内存区,但如果某个内存区的地址使用一个明确的类型指针例如int*、long*来进行保 存,那么指针偏移时地址的偏移数以类型占的字节数为基本单位进行偏移,例如int *p变量+1的时候实际上跳过的是sizeof(int)的类型字节数的地址为单位进行跳跃——也就是跳跃4个地址,但如果是不确认类型的情况下使用void*来保存,则必须指定每次跳跃的准确地址数。
  • 0