酷!學園

技術討論區 => 程式討論版 => C/C++程式設計討論區 => 主題作者是: iopklmm 於 2013-09-29 14:56

主題: C 有辦法判斷型態嗎?
作者: iopklmm2013-09-29 14:56

請問各位

C 有沒有函數可以判斷資料型態? 像是 python 裡面的 type()

不知道下面這兩個變數的資料型態是否相等?

第一個
char * array[100];

第二個
char ** array;
array = calloc(100,sizeof(char *);

謝謝
主題: Re: C 有辦法判斷型態嗎?
作者: Yamaka2013-09-30 19:44
請問各位
C 有沒有函數可以判斷資料型態? 像是 python 裡面的 type()

印象中,c 沒有 type() typeof() 或 gettype() 這類函數

不知道下面這兩個變數的資料型態是否相等?

第一個
char * array[100];

第二個
char ** array;
array = calloc(100,sizeof(char *);

謝謝

這兩個『資料型態』一樣
主題: Re: C 有辦法判斷型態嗎?
作者: topwu2013-10-04 10:03
c 的 typeof  http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof (http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof)

在 x86 32bit 的環境下

第一個 char * array[100];

array 是大小為 400bytes 的陣列,其中每一個欄位都是一個 pointer,sizeof(array) == 400

第二個 char ** array;

array 是指向一個 pointer 的 pointer,大小是 4 bytes,sizeof(array) == 4

一個是陣列,一個是指標,資料型態應該不相同吧
主題: Re: C 有辦法判斷型態嗎?
作者: Yamaka2013-10-04 12:00
c 的 typeof  http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof (http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof)

gcc 的 typeof 並不是判斷資料型態用的
根據 gnu 的說法是參考到(Referring to)某個變數的型態,如上面那頁範例所示

一般『高階語言』對變數資料型態並沒有很嚴格要求
甚至不需要事先宣告便能直接使用,而且一個變數可以給予各種不同型態的資料
因此會有 type(), gettype() 或 typeof() 這類傳回『資料型態名』以供辨別的函數
c/c++ 對變數型態有嚴格的要求,使用變數前都必須先宣告以確定型態
而且執行時期也不能指定不同型態的資料給變數(可強制轉型的除外)
如此這般也就不需要 type(), gettype() 或 typeof() 這些函數  :D
ps: 強制轉型實際上已先將資料轉成被指定變數相同的型態,所以該變數型態沒變

在 x86 32bit 的環境下
第一個 char * array[100];
array 是大小為 400bytes 的陣列,其中每一個欄位都是一個 pointer,sizeof(array) == 400
第二個 char ** array;
array 是指向一個 pointer 的 pointer,大小是 4 bytes,sizeof(array) == 4
一個是陣列,一個是指標,資料型態應該不相同吧

至於這兩個『資料型態』是否相同,看各人的理解嘍 :D