1. 程式人生 > >sizeof(陣列名)及strlen(陣列名)

sizeof(陣列名)及strlen(陣列名)

程式的輸出結果為: 

1:100 

2:4 
3:1   //相當於a[100]這個數所佔的位元組大小,也就是一個char位元組佔得大小 

當陣列作為函式的引數進行傳遞時,該陣列自動退化為同類型的指標。不論陣列a的容量是多少,sizeof(a)始終等於sizeof(char  *)。 

func(char* p)
{
    strcpy(p, "1234");
}

int main()
{
    char ch[100] = {0};
    func(ch);
    a = sizeof(ch); 
    b = strlen(ch);   
  
    printf("a = %d, b = %d\n", a, b);      
}

執行結果:

a = 100, b = 4



if         陣列名直接作為引數壓棧
then     sizeof(陣列名) = 一個指標所佔位元組數
else     sizeof(陣列名) = 陣列所佔位元組數
測試程式如下:

typedef struct{
    char array[32];
}node_t;

void fun1(node_t    node)
{
    printf("%d/n", sizeof(node.array));
}

void fun2(char array[32])
{
    printf("%d/n", sizeof(array));
}

int main(void)
{
    node_t  node;
    fun1(node); // indirect
    fun2(node.array); // direct

    return 0;
}
程式的輸出是:
32
4