陣列名稱與指標
定義一個 ptr pointer, point to 1024 個 char size 的記憶體區塊, char *ptr = malloc( sizeof(char) * 1024);sizeof(ptr) 所得到的是該指標本身的大小,而 sizeof (*ptr) 所得到的是,指標指向的記憶體區塊之第一個 item 之型態大小。char array[1024];sizeof(array) 為 1024 個 char 的大小, sizeof(*array) 為一個 char 的大小,因為 *array 會被 compiler 視為 *(array+0),等同於 array[0],代表 array 中的第一個 item 的 size,ex. array[2] = *(array+2) = *(2+array) = 2[array] 如果要將 array 每個 item 內容設定為 0, 可以 memset(array, 0, sizeof(array));而若要將 pointer 所指向的整塊 memory 都設定為 0,就要自己記錄 memory size:buf_size*=sizeof(char); char *ptr = malloc( buf_size); memset(ptr, 0, buf_size);sizeof 取到 (*pointer) 是 1 個 element 的 size
ming@mp:/tmp$ gcc test.c -o test ming@mp:/tmp$ ./test sizeof(struct co): 40 sizeof(a): 4 ( pointer a 的 size) sizeof(*a): 40 ( 1 個 struct co 的 size ) sizeof(*b): 4 ( 1 個 int 的 size)
Last updated