作者 主題: C 有辦法判斷型態嗎?  (閱讀 6872 次)

0 會員 與 1 訪客 正在閱讀本文。

iopklmm

  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
C 有辦法判斷型態嗎?
« 於: 2013-09-29 14:56 »

請問各位

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

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

第一個
char * array[100];

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

謝謝

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: C 有辦法判斷型態嗎?
« 回覆 #1 於: 2013-09-30 19:44 »
請問各位
C 有沒有函數可以判斷資料型態? 像是 python 裡面的 type()

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

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

第一個
char * array[100];

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

謝謝

這兩個『資料型態』一樣

topwu

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
Re: C 有辦法判斷型態嗎?
« 回覆 #2 於: 2013-10-04 10:03 »
c 的 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

一個是陣列,一個是指標,資料型態應該不相同吧

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: C 有辦法判斷型態嗎?
« 回覆 #3 於: 2013-10-04 12:00 »
c 的 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
« 上次編輯: 2013-10-04 12:15 由 Yamaka »