噗浪連結還沒設,上課用的講義和作業按我。
Computer memory
Heap:a chunk of memory that users can use to dynamically allocated memory. Lasts until freed, or program exits.
Stack:contains local variables from functions and related book-keeping data. LIFO. 從比較大的address開始?
Function variables are pushed onto stack when called. popped off stack when return.
Pointers/Addresses
每一個變數都是一個「位址」和「值」的組合。pointer是指向某個變數的變數 ,基本上就是那個變數的位址啦。
Pointers/Addresses
每一個變數都是一個「位址」和「值」的組合。pointer是指向某個變數的變數 ,基本上就是那個變數的位址啦。
宣告的時候可以直接宣告變數的type(例如 int x、char x)
或是宣告變數的指標,只要在變數的類型前面加*就是了(例如 int* x、 char* x)。
變數前面加&就可以得到位址(例如變數x的位址 ptr = &x)
位址前面加*就可以得到那個位址上的值(x = *ptr)。用*ptr取得變數值的做法叫做dereferencing。
pointer本身也是變數,所以可以有pointer to pointer:char** ptr。
data type size:
- char: 1 byte
- bool: 1 byte
- int: 4 byte
- float: 4 byte
- double: 8 byte
可以用sizeof(data type)取得!
Arrays
通常就是一堆memory。宣告方法是 data_type array_name[array_size] (例如 int x[5])。size定下來之後就不能改。可以用 {element1, element2, ...}初始化。用array_name[nth]取得第n個的值。
array_name就是指向array最開始的pointer。也等於&array_name[0]。
C沒有字串String這個type,字串要用char的array做。實際上char array的長度是總共字元加一,因為最後會有一個\0(是零,不是歐)用來null的東西。String可以用"xxx"來宣告,compiler懂。char則是用單括號'x'宣告。
Memory Allocation
#include
malloc(size)
realloc(pointer_name, size)
free(pointer_name)
Arrays
通常就是一堆memory。宣告方法是 data_type array_name[array_size] (例如 int x[5])。size定下來之後就不能改。可以用 {element1, element2, ...}初始化。用array_name[nth]取得第n個的值。
array_name就是指向array最開始的pointer。也等於&array_name[0]。
C沒有字串String這個type,字串要用char的array做。實際上char array的長度是總共字元加一,因為最後會有一個\0(是零,不是歐)用來null的東西。String可以用"xxx"來宣告,compiler懂。char則是用單括號'x'宣告。
Memory Allocation
#include
malloc(size)
realloc(pointer_name, size)
free(pointer_name)
沒有留言:
張貼留言