| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 974 人关注过本帖
标题:关于malloc()函数的用法
只看楼主 加入收藏
davidguhao
Rank: 1
来 自:广东
等 级:新手上路
帖 子:126
专家分:7
注 册:2016-7-18
结帖率:89.47%
收藏
已结贴  问题点数:10 回复次数:8 
关于malloc()函数的用法
我在书中看到这么一个语句
char *str = (char *) malloc(100);;

问题:1 两个分号是印刷错误吗
2 malloc之前的(char*)是啥意思?
搜索更多相关主题的帖子: 印刷 
2016-08-03 15:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
1 两个分号是印刷错误吗 ------ 谈不上,反正多一个也无所谓
2 malloc之前的(char*)是啥意思? ------ 外行写的,放C语言中这属于冗余性烂代码。想想,C语言为了避免出现这种冗余,特意规定void*可隐式转化为任意类型的指针。
2016-08-03 15:45
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
char *str = (char *) malloc(100);

我用的是Dev C++,gcc软件,写malloc的时候如果少了那个强制转换就会报error,大意是赋值号两边类型不匹配。(但也只是error,可以不管它运行)

2.malloc是一个函数,他向内存申请一段长度为(100)的空间,然后返回这段空间的指针,由于他不知道你要干嘛用,所以返回的是void*,malloc前面的(char*)就是强制转换类型为char*,
1.两个分号应该就是印刷错误,C语言一条语句一个分号,除了偶尔在像for(;;)循环里见到两个连续的分号(但这里又不一样的意义,因为for循环里面要求必须有三个语句块,并用两个分号分开,你可以没有语句块,但不能没有分号)
------------------------------------------------------------------
(我学这门语言的时间基本和我注册本论坛的时间差不多。所以还很浅,只是就我认识的一点东西进行分享。楼上的rjsp大大当年可是帮忙解决了我很多疑惑。我的发言不是要驳他的观点,只是我还没接触到那个层次,所以认识有点不一样。。)

φ(゜▽゜*)♪
2016-08-03 17:29
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 3楼 书生牛犊
你去年10月份开始学的?我也是。感觉你学习能力好强!
2016-08-03 20:26
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
我到现在还在联系pat上面的题目呢。当初刚学的时候一次报了好几个网易课程,做了一堆的作业,,几个课程讲的东西相互印证,相互补充就会比较的全面,然后就是不停的刷题了。遇到不懂的就百度,百度解决不了的代码问题就拿到论坛来请教,然后在版内各位大大的帮助下学了不少东西。至于版主的名号纯粹是巧合,算法板块人气比较差点,然后我参与的多了点,然后就那啥了。。
我的技术真的是还非常嫩,同常能参合的都是比较基础的问题

本着交流的心态,不论对错都讲出来,和别人讨论,在被纠正中成长。

新手一定要勇于发言,不要怕错。程序员,就是来debug的

φ(゜▽゜*)♪
2016-08-03 20:36
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10566
专家分:43004
注 册:2014-5-20
收藏
得分:0 
试试这样用法有什么不同:
void *str = malloc(100);
2016-08-03 21:41
davidguhao
Rank: 1
来 自:广东
等 级:新手上路
帖 子:126
专家分:7
注 册:2016-7-18
收藏
得分:0 
回复 6楼 吹水佬
这个会怎么样啊?小白我现在只是学到字符和字符串那一章……

暨南大学市场营销……
但是我有一颗计算机专业的心……
2016-08-04 09:33
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 7楼 davidguhao
作用就和 char a[100]一样。只不过malloc是可以程序运行到一半的时候根据需要申请空间,我这种的就必须在编译的时候就确定大小,是在程序运行之前就定义了

φ(゜▽゜*)♪
2016-08-04 18:42
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
收藏
得分:0 
char *str = (char *) malloc(100);;

分号估计是作者打代码的时候手哆嗦了一下多打了个分号没注意,不过最多算个空语句没啥事

malloc的返回值是void类型方便赋给不同类型的指针变量,但是要在赋值时进行强制转换类型
所以要写个 (char *)


[此贴子已经被作者于2016-8-5 22:58编辑过]

2016-08-05 22:57
快速回复:关于malloc()函数的用法
数据加载中...
 
   



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

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