內(nèi)存分析
- 在計(jì)算機(jī)中1個(gè)字節(jié)占用8位
- 定義變量的目的就是為了在內(nèi)存中開辟一塊存儲(chǔ)空間
- 定義變量時(shí)指定數(shù)據(jù)類型的目的就是為了告訴計(jì)算機(jī)需要開辟多大的存儲(chǔ)空間
- 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碼
- ASCII碼是一套字符對(duì)應(yīng)的數(shù)值表
- http://tool.oschina.net/commons?type=4
總結(jié): 字符存儲(chǔ)的順序:
- 根據(jù)字符在ASCII碼表中找到對(duì)應(yīng)的十進(jìn)制數(shù)
- 將找到的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制
- 將轉(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):
- 如果存儲(chǔ)的數(shù)據(jù)超出了類型對(duì)應(yīng)的取值范圍, 那么就會(huì)導(dǎo)致存儲(chǔ)的數(shù)據(jù)不對(duì)
- 由于內(nèi)存非常有限, 所以在編寫程序的時(shí)候, 盡量合理的定義變量
- 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ù)組
- 應(yīng)用場(chǎng)景
- 如果想要
同時(shí)保存多個(gè)``相同類型的數(shù)據(jù)的時(shí)候, 就要想到數(shù)組
- 定義數(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
- 先定義再初始化
- 注意點(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]) );