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操作的,都要將操作對象的類型寬度考慮進來

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