| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2352 人关注过本帖
标题:关于malloc函数的简单使用的困惑
只看楼主 加入收藏
多久变大神
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-4-6
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:4 
关于malloc函数的简单使用的困惑
学习数据结构经常遇到使用malloc函数的地方,
有(int*)malloc(sizeof(int*)*length);
也碰到过(Seqlist)malloc(sizeof(Seqlist)*size)

主要有两点困惑:
1、使用时*到底怎么回事?为什么()里面*时有时无?////即对格式不清楚,百度上参差不齐、
2、如何申请动态空间呢?
即?=(。。。)malloc(。。。)
?需要满足什么条件呢?

求前辈们高手们解、、、
搜索更多相关主题的帖子: 动态 百度 空间 如何 
2015-06-15 17:53
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:5 
int  a,*b,c;
这一句a,b前面没有*,表示a,b被定义为一个普通有符号整型变量,b前面有*,表示b被定义为一个指针变量,指向另一个整型量,里面存放另一个整型量的地址。
a=3;
b=&a;
此时b指向a,b中存放的是a的地址。
c=*b;
此时*在b前面表示引用b所指向的变量的值,即a的值。所以该语句执行后,c的值也为3。
手机上回复太麻烦。
2015-06-15 18:42
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:5 
()malloc()
前面一个括号写数据类型,但因为该函数返回的是地址,所以这个数据类型应该为指针型。后面一个括号写你所要申请内存空间的大小。如:
(int  *)malloc(sizeof(int))
像这种基础知识,楼主应找本C语言书籍看。
2015-06-15 18:52
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:10 
先看一下malloc()函数的原型:

void* malloc(size_t);


看到没, malloc()用来申请一块空间, 返回的是一个地址, 在C中,只有指针变量才能存储地址. 而malloc()返回的是一个void类型的地址, 也就是说没有指向具体的数据类型.所以需要强制类型转换.

对于楼主提到的这两种情况:
1. (int*)malloc(sizeof(int*)*length);

 2.  (Seqlist)malloc(sizeof(Seqlist)*size)


对于第一种情况,  int是C的保留字, 用来声明整型变量, malloc前面加(int *)是把申请的空间强制转换为指向整型数据的指针使用(这话有点拗口).

对于第二种情况,  你可以联系一下上下文, 你一定能够找到类似下面的这种定义(任何一本C教材或用C描述的数据结构教材):
程序代码:
            typedef struct list{
                ......
                ......
            }List,*Seqlist;     //这里的List不是必须的, 不过一般的教材上都有 

因为有了这个定义, Seqlist本身就是一个具体的数据类型了, 所以可以用到malloc前面来进行强制转换了.

换句话说, 使用malloc()函数必须进行强制类型转换.

[ 本帖最后由 vvvcuu 于 2015-6-20 14:26 编辑 ]

代码测试环境:  WinXP+C-Free5.0.
2015-06-20 14:24
多久变大神
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-4-6
收藏
得分:0 
回复 4楼 vvvcuu
3Q!
2015-06-21 19:56
快速回复:关于malloc函数的简单使用的困惑
数据加载中...
 
   



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

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