C语言中那些年我们容易犯错的一维数组操作

通过两个例子来加深对一维数组操作的理解

实际是对指针,地址的理解。

当数组名 +1,或数组的地址+1时,加的结果是经过了什么逻辑加乘?

//这些例子主要演示一维数组访问的一些操作
//也是面试里面经常会被问的
//也是最基础的操作,但常容易犯错的

//扫盲写法:
//  name[i] == *(name+i) == i[name]

#include <stdio.h>

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    printf("sizeof(arr) = %d\n", sizeof (arr));
    printf("&arr    = %p\n", &arr);
    printf("&arr + 1    = %p\n", &arr + 1);

    int (*pa)[10] = &arr;
    printf("pa  = %p\n", pa);
    printf("pa+1    = %p\n", pa + 1);
    return 0;
}
//&arr    = 008FF9AC
//&arr + 1    = 008FF9D4
//pa  = 008FF9AC
//pa+1    = 008FF9D4
#include <stdio.h>

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    printf("arr[0]   = %d\n", arr[0]);
    printf("*(arr+0) = %d\n", *(arr+0));
    printf("arr     = %p\n", &arr);
    printf("arr + 1  = %p\n", arr + 1);

    printf("&arr[0]     = %p\n", &arr[0]);
    printf("&arr[0]+1   = %p\n", &arr[0]+1);
    return 0;
}
//arr[0]   = 1
//*(arr+0) = 1
//arr     = 00B5FADC
//arr + 1  = 00B5FAE0
//&arr[0]     = 00B5FADC
//&arr[0]+1   = 00B5FAE0

小小的总结:涉及到一维数组地址 +1操作的,都要将操作对象的类型宽度考虑进来

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章