討論區快速選單
知識庫快速選單
討論區最近新進100則主題 CRM雲端平台必備Salesforce認證 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
malloc問題
更改我的閱讀文章字型大小
作者 : aa25621166(大頭)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/5/16 下午 08:40:08
請問一下
struct people
{
char classname[100];
char teachername[100];
char classroom[100];
char book[100];
int weektime;
struct people *next;
};
     people *head;
people *current;
     current=(struct people *)malloc(sizeof(struct people));
    
     這段程式中(struct people *)是代表什麼意思?
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4944 | 人氣 9172 | 評價 32280 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人aa25621166註記此篇回應為最佳解答 2014/5/17 上午 02:13:59
>current=(struct people *)malloc(sizeof(struct people));
>
>這段程式中(struct people *)是代表什麼意思?

Casting (轉型).

malloc() 的回傳類型是 void*, current 是 people*. 兩個不同類型的指標.

如果你用的是 C 語言, casting 沒有必要. 因為 C 語言可以從 void* 轉換至任何指標, 或是從任何指標轉換成 void*:
  current = malloc(sizeof(struct people)); /* 無需 casting, C 編譯 OK */

C 語言幾乎很少有用到 casting 的時候.

如果編譯器告訴你無法從 void* 轉換至 people*, 那是因為你用的是 C++ 的編譯器, 而不是用 C 語言的編譯器. 對 C++ 語言來說, void* 跟 people* 是兩個不同的類型.

但如果你用 C++, 你不應該用 malloc(), 你應該用 new:
  current = new people;

 板主 : Jammy
 > 新手入門 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 新手入門 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
新手入門
1 Raymond 900 
2 BK. 820 
3 Jasper 500 
4 太子 500 
5 Benson 410 
6 joe 400 
7 DEMO999 370 
8 青衫 300 
9 小朱 300 
10 Eric Ho 290 
新手入門
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125