char *Data="qwertyuiop";與char Data[] ="qwertyuiop";有什麼區別

前者Data是一個指針,它的類型是char *,它指向的類型是char,sizeof(Data)測的是指針本身所佔內存的大小。
後者Data是一個數組,它的類型是char[],它指向的類型也是char,sizeof(Data)測出的是整個數組的大小。
所以sizeof(Data)的結果不同。前者是4,後者是11(有一個‘/0’)。
環境:Ubuntu 14.04LTS

代碼1:

#include "stdio.h"
#include <stdlib.h>
#include "string.h"
void main()
{

    char *Data = "qwertyuiop";
    char *data ;
    data = (char *) malloc(12);

    memcpy (data,Data,sizeof(Data) );
    printf ("data is %s.\nand sizeof(Data) is %d.\n", data, sizeof(Data) );
    free(data);
}

結果:
data is qwer.
and sizeof(Data) is 4.
代碼2:
#include "stdio.h"
#include <stdlib.h>
#include "string.h"
void main()
{

    char Data[] = "qwertyuiop";
    char *data ;
    data = (char *) malloc(12);

    memcpy (data,Data,sizeof(Data) );
    printf ("data is %s.\nand sizeof(Data) is %d.\n", data, sizeof(Data) );
    free(data);
}

結果:
data is qwertyuiop.
and sizeof(Data) is 11.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章