C語言 內(nèi)存分析 數(shù)組知識(shí)點(diǎn)整理

內(nèi)存分析

  1. 在計(jì)算機(jī)中1個(gè)字節(jié)占用8位
  2. 定義變量的目的就是為了在內(nèi)存中開辟一塊存儲(chǔ)空間
  3. 定義變量時(shí)指定數(shù)據(jù)類型的目的就是為了告訴計(jì)算機(jī)需要開辟多大的存儲(chǔ)空間
  4. char在內(nèi)存中占用一個(gè)字節(jié), int在內(nèi)存中占用4個(gè)字節(jié), double在內(nèi)存中占用8個(gè)字節(jié)sizeof(char);sizeof(int);sizeof(double);

內(nèi)存分配的規(guī)則

  • 計(jì)算機(jī)分配內(nèi)存的規(guī)則: 從大到小的分配
  • 變量名稱對(duì)應(yīng)的是變量占用內(nèi)存最小的那個(gè)字節(jié)

ASCII碼

總結(jié): 字符存儲(chǔ)的順序:

  1. 根據(jù)字符在ASCII碼表中找到對(duì)應(yīng)的十進(jìn)制數(shù)
  2. 將找到的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制
  3. 將轉(zhuǎn)換好的二進(jìn)制存儲(chǔ)到內(nèi)存中

類型說明符

  • 類型說明符一般都是用于修飾int類型的
    • 1.說明長(zhǎng)度的
     * short---- > %hi --占位符
     * long ---- > %li --占位符
     * long long ---- > %lli --占位符
     * ------------------------------------
     * char 1個(gè)字節(jié)  -2^7~2^7-1  -128~127
     * short int 2個(gè)字節(jié) -2^15~2^15-1
     * int  4個(gè)字節(jié)  -2^31~2^31-1
     * long int:
     * 如果在32位編譯器中, long int 占用4個(gè)字節(jié)
     * 如果在64位編譯器中, long int 占用8個(gè)字節(jié)
     *
     * long long int 8個(gè)字節(jié) -2^63~2^63-1

注意點(diǎn):

  1. 如果存儲(chǔ)的數(shù)據(jù)超出了類型對(duì)應(yīng)的取值范圍, 那么就會(huì)導(dǎo)致存儲(chǔ)的數(shù)據(jù)不對(duì)
  2. 由于內(nèi)存非常有限, 所以在編寫程序的時(shí)候, 盡量合理的定義變量
  3. C語言不看怎么存, 只看怎么取

說明符號(hào)位的

  • unsigned 無符號(hào)的:

  • 不把二進(jìn)制的第一位當(dāng)做符號(hào)位來使用, 所以只能存儲(chǔ)0正數(shù), 不能存儲(chǔ)負(fù)數(shù)

  • 注意點(diǎn):

  • 如果變量被unsigned修飾了, 那么取出的時(shí)候必須使用%u, %u就代表用無符號(hào)的方式取出

unsigned int num1 = -6;

printf("num1 = %u\n", num1);
  • 應(yīng)用場(chǎng)景: 存儲(chǔ)銀行存款, 學(xué)生的分?jǐn)?shù)等不能出現(xiàn)負(fù)數(shù)的情況

signed 有符號(hào)的:
默認(rèn)int就是有符號(hào)的, 就可以保存負(fù)數(shù),零,正數(shù), 所以signed一般用不上


數(shù)組

  1. 應(yīng)用場(chǎng)景
  • 如果想要同時(shí)保存多個(gè)``相同類型的數(shù)據(jù)的時(shí)候, 就要想到數(shù)組
  1. 定義數(shù)組格式:
  • 元素類型 數(shù)組名稱[元素個(gè)數(shù)];
int arr[2];  // 定義int 類型的數(shù)組 arr

數(shù)組的初始化

1. 定義的同時(shí)初始化 (完全初始化)

 int ages[4] = {1, 3, 5, 7};
  • 注意點(diǎn):如果定義的同時(shí)初始化, 并且沒有指定元素的個(gè)數(shù), 那么元素的個(gè)數(shù)就是初始化*的個(gè)數(shù)
  • 如果只進(jìn)行了部分初始化, 那么沒有被初始化的元素會(huì)賦值為0
  1. 先定義再初始化
  • 注意點(diǎn):
  • 如果定義的同時(shí)不初始化, 那么元素的個(gè)數(shù)不能省略
  • 2.如果先定義再初始化, 那么就不能一次性初始化,逐個(gè)初始化

先定義再初始化(部分初始會(huì))

  • 如果只進(jìn)行了部分初始化, 那么沒有被初始化的元素不會(huì)賦值為0

遍歷數(shù)組

  • 概念
    遍歷數(shù)組就是取出數(shù)組中存儲(chǔ)的所有數(shù)據(jù), 我們就稱之為遍歷數(shù)組
//這是遍歷數(shù)族的函數(shù)
void printArray(int arr[],int length){
    for(int i=1;i<length;i++){
        printf("arr[%i] = %i\n",i,arr[i]);
    }
}

注意點(diǎn)

  • 在遍歷數(shù)組的時(shí)候, 循環(huán)結(jié)束的條件不要寫死
  • 規(guī)律: sizeof(數(shù)組名稱) 可以得到該數(shù)組占用的內(nèi)存總大小
printf("sizeof(arr) = %i\n", sizeof(arr));
  • 規(guī)律: sizeof(數(shù)組元素) 可以得到該元素占用的內(nèi)存大小,從而計(jì)算數(shù)組的長(zhǎng)度
  • 數(shù)組占用的內(nèi)存 / 單個(gè)元素占用的內(nèi)存 = 數(shù)組的長(zhǎng)度(length.arr)
printf( " sizeof(  arr[1]) = %i\n",   sizeof(arr[1])  );
printf( " length = %i\n"  ,   sizeof(arr)   /   sizeof(arr[1])  );
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1. 基礎(chǔ)知識(shí) 1.1、 基本概念、 功能 馮諾伊曼體系結(jié)構(gòu)1、計(jì)算機(jī)處理的數(shù)據(jù)和指令一律用二進(jìn)制數(shù)表示2、順序執(zhí)...
    yunpiao閱讀 5,804評(píng)論 1 22
  • C語言中內(nèi)存分配 在任何程序設(shè)計(jì)環(huán)境及語言中,內(nèi)存管理都十分重要。在目前的計(jì)算機(jī)系統(tǒng)或嵌入式系統(tǒng)中,內(nèi)存資源仍然是...
    一生信仰閱讀 1,313評(píng)論 0 2
  • 一年一朵,外出是第一年
    天蝎愛吃糖閱讀 458評(píng)論 0 0
  • 假如在一個(gè)本該奮斗的年紀(jì),選擇了安逸的混日子,那么未來該會(huì)是什么樣子? 觀望了許久的《簡(jiǎn)書》平臺(tái),我終于也要慢慢遺...
    簡(jiǎn)書你的猿閱讀 623評(píng)論 0 3
  • 有時(shí)候運(yùn)氣太好感覺自己擁有超能力 我說深海里面會(huì)下雪 我說山那邊短短耳朵小兔子在打噴嚏 我...
    巖舟閱讀 164評(píng)論 0 1

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