陣列名稱與指標

定義一個 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

 

#include<stdio.h>

struct co {

int a; int b;  int c;  int d;  int e;
int f;  int g;  int h;  int i;  int j;

};

int main(void)
{

struct co *a=NULL;
int *b;
printf(“sizeof(struct co): %d\n", sizeof(struct co));
printf(“sizeof(a): %d\n", sizeof(a));
a = malloc(sizeof(struct co)*2);
b = malloc(sizeof(int)*2);
printf(“sizeof(*a): %d\n", sizeof(*a));
printf(“sizeof(*b): %d\n", sizeof(*b));
return 0;

}
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)

本篇發表於 C 語言。將永久鏈結加入書籤。

陣列名稱與指標 有 2 則回應

  1. Williamnich 說道:

    I’d like to find out more? I’d like to find out more details.
    Legendario.

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *