| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 833 人关注过本帖
标题:malloc函数 请解释一下!
只看楼主 加入收藏
雪色朝阳
Rank: 2
等 级:论坛游民
帖 子:36
专家分:43
注 册:2010-3-10
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
malloc函数 请解释一下!
#include<stdlib.h>
main()
{
char *p,*q;
p=(char*)malloc(sizeof(char)*20);q=p;
scanf("%s%s",p,q);printf("%s%s\n",p,q);
}

从键盘输入abc def<回车>,则输出结果是多少?(答案是def def)为什么?

请帮忙解释一下红色部分!谢谢!
搜索更多相关主题的帖子: malloc 解释 函数 
2010-03-26 17:12
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:2 
分配20个char大小的堆空间
p,q指向相同的地址空间,如果你想输出abc def,这么写

#include<stdlib.h>
#include<stdio.h>
int main()
{
    char *p,*q;
    p=(char*)malloc(sizeof(char)*20);
    q=(char*)malloc(sizeof(char)*20);
    scanf("%s%s",p,q);
    printf("%s%s\n",p,q);
    free(p);
    free(q);
}
2010-03-26 17:19
书呆
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
收藏
得分:4 
p=(char*)malloc(sizeof(char)*20);// 分配20个字节的存储空间,p指向空间的首地址
q=p;// q也指向空间的首地址
scanf("%s%s",p,q);// 输入abc def,因为p,q指向的地址相同,所以abc被def覆盖

沉醉东风月下读。柴门闭,莫管客来无。
2010-03-26 17:21
雪色朝阳
Rank: 2
等 级:论坛游民
帖 子:36
专家分:43
注 册:2010-3-10
收藏
得分:0 
回复 3楼 书呆
为什么abc会被def所覆盖呢,而不是def被abc所覆盖呢?
2010-03-26 17:41
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:2 
以下是引用雪色朝阳在2010-3-26 17:41:00的发言:

为什么abc会被def所覆盖呢,而不是def被abc所覆盖呢?
后输入的覆盖先前输入的
2010-03-26 17:42
雪色朝阳
Rank: 2
等 级:论坛游民
帖 子:36
专家分:43
注 册:2010-3-10
收藏
得分:0 
回复 5楼 秀痘魔导士
那能不能使前输入的覆盖后输入的呢?比如说输出的是abcabc
2010-03-26 17:45
evilperfect
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2010-3-26
收藏
得分:1 
回复 6楼 雪色朝阳
scanf("%s%s",p,q);
你先在这个地方放了个苹果,然后在相同的地方放了个梨子,试问你可以伸手拿到的是苹果还是梨子?
2010-03-26 21:36
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1483
专家分:9055
注 册:2010-3-16
收藏
得分:1 
以下是引用evilperfect在2010-3-26 21:36:38的发言:

scanf("%s%s",p,q);
你先在这个地方放了个苹果,然后在相同的地方放了个梨子,试问你可以伸手拿到的是苹果还是梨子?
说的不错。
都是对同一个内存地址赋值。
2010-03-26 22:14
mghxz252
Rank: 2
等 级:论坛游民
帖 子:40
专家分:60
注 册:2010-1-18
收藏
得分:0 
又学会了一个,谢谢大家。
2010-03-27 11:49
drhp123
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-3-1
收藏
得分:0 
我觉得,p=q说明他们公用同一块内存空间,先放abc,内存中是abc,然后放入def,则内容变了,输出其实是两次输出同一地址中的内容.
2010-03-30 23:01
快速回复:malloc函数 请解释一下!
数据加载中...
 
   



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

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