(一)回首C指針:數(shù)據(jù)類型

一、理解NULL

  1. 定義形式
#define __DARWIN_NULL ((void *)0)
#define NULL  __DARWIN_NULL
  1. 以上以MacOS的LLVM為例。
  2. NULL實際為(void *)類型,并且值為0x00
  3. 是指針唯一能直接賦值的字面量

二、理解sizeof函數(shù)

  1. 實際是運算符,不需要引入任何頭文件
unsigned long len=sizeof int;
  1. 它的目的:是計算表達(dá)式的結(jié)果,所占據(jù)的空間大小
#include <stdio.h>
int main() {
    size_t len= sizeof(1+2.0l);
    printf("%zu\n",len); //answer: 16
    return 0;
}
  1. 計算的依據(jù): 是根據(jù)“聲明類型”的大小
#include <stdio.h>
int main() {
    int mm[3]; //12byte
    int *p=mm; //8byte (64位機(jī))
    size_t len1= sizeof(mm);
    size_t len2= sizeof(p);
    printf("%zu,%zu\n",len1,len2); //answer: 12,8
    return 0;
}
  1. 對于數(shù)組,也可以按"初始化器"
int mm[]={1,2,3}; //12byte

三、理解數(shù)據(jù)類型

  1. 普通數(shù)據(jù)類型:目的是為了分配固定空間大小的內(nèi)存,如: char ,short分別占1和2個字節(jié),這自然會影響到sizeof的結(jié)果。
  2. 數(shù)組類型:會根據(jù)元素的個數(shù),決定空間大小
  3. 結(jié)構(gòu)體類型:會根據(jù)聲明時元素的個數(shù)和類型進(jìn)行計算(注意:有內(nèi)存對齊的問題)
  4. 指針類型:無論指針是何種類型聲明,都只會根據(jù)OS的位數(shù)分配。32位機(jī)占4字節(jié)。

四、理解指針的類型

  1. 為什么要給指針加上類型?
    是為了確認(rèn)指針操作時的內(nèi)存范圍,主要有以下三種操作:
    (1)自增,自減: 按照指針的類型決定步長,如int,步長為4字節(jié)
    (2)*解引用:會按照指針的類型,決定使用多大的內(nèi)存字節(jié)數(shù)

五、理解指針強制轉(zhuǎn)換

  1. 目的:改變指針操作時的內(nèi)存范圍
  2. 萬用指針類型:void *,它是C99標(biāo)準(zhǔn)用來取代char *的指針類型,用于表示,只使用用一個字節(jié)范圍的指針類型。

六、指針的指針:

  1. 作用:自身是一個指針,其內(nèi)容是另一個指針地址。
  2. 它的自增:每次按計算機(jī)位數(shù)進(jìn)行增加,如64位機(jī),增長8字節(jié)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容