天天看點

sizeof 數組_C語言學習第21篇---數組的本質剖析

sizeof 數組_C語言學習第21篇---數組的本質剖析
數組是相同類型的變量的有序集合 圖示:
sizeof 數組_C語言學習第21篇---數組的本質剖析
數組的大小: 數組在一片連續的空間記憶體空間中存儲元素 數組元素個數可以顯示或隐式指定 實驗1:數組的初始化實驗
#include <stdio.h>

int main()
{
    int a[5] = {1, 2};
    int b[] = {1, 2};
    
    printf("a[2] = %dn", a[2]);
    printf("a[3] = %dn", a[3]);
    printf("a[4] = %dn", a[4]);
    
    printf("sizeof(a) = %dn", sizeof(a));
    printf("sizeof(b) = %dn", sizeof(b));
    printf("count for a: %dn", sizeof(a)/sizeof(int));
    printf("count for b: %dn", sizeof(b)/sizeof(int));
    
    return 0;
}
           

數組位址與數組名

  • 數組名代表數組首元素的位址
  • 數組的位址需要取位址符&才能看到
  • 數組首元素的位址 值和數組的位址值相同
  • 數組首元素的位址與數組的位址是兩個不同的概念
實驗2:數組名和數組位址
#include <stdio.h>

int main()
{
    int a[5] = { 0 };

    printf("a = %pn", a);
    printf("&a = %pn", &a);
    printf("&a[0] = %pn", &a[0]);
    
    return 0;
}
           

數組的盲點:

數組名可以看做一個常量指針

數組名“指向"的是記憶體中數組首元素的起始位置 數組名不含數組的長度資訊 在表達式數組名不能看做常量指針
  • 數組名作為sizeof操作符的參數
  • 數組名作為&運算符的參數

執行個體3:

#include <stdio.h>

int main()
{
    int a[5] = {0};
    int b[2];
    int* p = NULL;
    
    p = a;
    
    printf("a = %pn", a);
    printf("p = %pn", p);
    printf("&p = %pn", &p);
    printf("sizeof(a) = %dn", sizeof(a));
    printf("sizeof(p) = %dn", sizeof(p));
   
    printf("n");

    p = b;
    
    printf("b = %pn", b);
    printf("p = %pn", p);
    printf("&p = %pn", &p);
    printf("sizeof(b) = %dn", sizeof(b));
    printf("sizeof(p) = %dn", sizeof(p));
    
    b = a;
  
    return 0;
}
           
sizeof 數組_C語言學習第21篇---數組的本質剖析

小結:指針難就難在概念的不清晰

  • 數組是一片連續的記憶體空間
  • 數組的位址和數組首元素的位址意義不同
  • 數組名在大多數情況下被當成常量指針的處理
  • 數組名其實并不是指針,不能将其等同于指針

說明

1.該文檔僅供個人學習使用,版權所有,禁止商用。

2.本文由我一個人編輯并整理,難免存在一些錯誤。

3.為了友善大家平時公交、地鐵、外出辦事也能用手機随時随地檢視該教程,該教程同步更新于微信公衆号『

Allen5G

』。

我的微信公衆号(ID:Allen5G)主要分享軟體工程師進階(嵌入式,Linux,C/C++,python,英語),程式員職業發展,如果想檢視更多内容,可以關注我的微信公衆号『Allen5G』