關於sizeof()使用的幾個圈套

研究問題:

  1. sizeof(指針變量)
  2. sizeof(數組名)
  3. sizeof(作形參的數組變量名)

要點:

  1. 在32位Linux下:
    char str[]=”Hello”;
    char *p=str;
    int n=10;
    void func(char str[100])
    {
    ……;
    }
    void *p=malloc(100);

    sizeof(str)=6
    sizeof(p)=4
    sizeof(n)=4
    sizeof(str)=4
    sizeof(p)=4

  2. sizeof 不能測定動態分配的數組大小。
    strlen 可用於測定動態分配的字符數組長度但不適合int.
    _msize() 可用於測定動態分配的數組用去的內存,通常比數組單元要多一點。
    來自 http://blog.csdn.net/djb100316878/article/details/42920341
  3. 剖析:
    Func ( char str[100] )函數中數組名作爲函數形參時,在
    函數體內,數組名失去了本身的內涵,僅僅只是一個指針;在失
    去其內涵的同時,它還失去了其常量特性,可以作自增、自減等操
    作,可以被修改。

    數組名的本質如下:
    (1)數組名指代一種數據結構,這種數據結構就是數組;
    例如:
    char str[10];
    cout << sizeof(str) << endl;
    輸出結果爲 10,str 指代數據結構 char[10]。
    (2)數組名可以轉換爲指向其指代實體的指針,而且是一個
    指針常量,不能作自增、自減等操作,不能被修改;
    char str[10];
    str++; //編譯出錯,提示 str 不是左值
    (3)數組名作爲函數形參時,淪爲普通指針。
    Windows NT 32 位平臺下,指針的長度(佔用內存的大小)爲
    4 字節,故 sizeof( str ) 、sizeof ( p ) 都爲 4。

    來自 http://blog.csdn.net/hnlyyk/article/details/49639135

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