| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:p1=(struct LNode*)malloc(sizeof(struct LNode));
只看楼主 加入收藏
ybyc9999
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2015-1-24
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:4 
p1=(struct LNode*)malloc(sizeof(struct LNode));
p1=(struct LNode*)malloc(sizeof(struct LNode));

malloc前面加上(struct LNode*)有啥意义,内存的大小不应该是整形的吗?

2015-02-15 19:45
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:10 
要返回开辟的内存的首地址,这样才能找到这块内存嘛

一片落叶掉进了回忆的流年。
2015-02-15 21:19
ybyc9999
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2015-1-24
收藏
得分:0 
回复 2楼 诸葛欧阳
如果写成这样呢
p1=int malloc(sizeof(struct LNode));
2015-02-15 21:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
以下是引用ybyc9999在2015-2-15 19:45:54的发言:

p1=(struct LNode*)malloc(sizeof(struct LNode));

malloc前面加上(struct LNode*)有啥意义,内存的大小不应该是整形的吗?

你是初學者,記住右邊需要强制類型轉換爲左邊指針所指向的類型即可。比如你定義struct LNode* p1,那麽就需要把右邊malloc()返回的void*指針强制爲struct LNode*。

void*是無類型指針,是用於指向不確定類型的,使用的時候,必須把它解釋爲確定的類型。

授人以渔,不授人以鱼。
2015-02-15 23:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
C的語法是這樣,C++比這個簡單得多:
程序代码:
// 結構體LNode的定義,是一個數據類型,命名爲LNode,就如int一樣
struct LNode
{
};

LNode* p1;            // p1是指向LNode數據類型的指針,這裏可以看出LNode與int等内置數據類型是一樣的地位
p1 = new LNode;       // 在堆上創建一個LNode數據,返回它的指針p1

// 以上兩行可以合并爲一行
LNode* p1 = new LNode;


這樣的語法和用法,比C清晰得多,不存在所謂的强制類型轉換困惑,意義也很明確。當用C++編譯器寫C程序的時候,推薦使用這種語法。

btw: 事實上,這裏struct和class是等效詞,不管是結構體struct還是類class,都是一樣的,在C++中這兩者是同義詞。也就是說,struct中可以寫方法函數。這就是C++作爲“擴展的C”的來源,以前叫“帶類的C”。不要以爲C++就是MFC、視窗編程,不是的,C++本來就是在命令行、控制臺下開發出來的與C一樣的系統語言,C和C++在語法上向來是你中有我我中有你的關係,很難也沒必要分清的,不然人家不會C++編譯器天生都是C編譯器了。


[ 本帖最后由 TonyDeng 于 2015-2-15 23:38 编辑 ]

授人以渔,不授人以鱼。
2015-02-15 23:29
快速回复:p1=(struct LNode*)malloc(sizeof(struct LNode));
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060320 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved