| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2936 人关注过本帖
标题:初来乍到, 有问题请教
只看楼主 加入收藏
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:64 
初来乍到, 有问题请教
1、写出sizeof在32位机器上的运行结果
void *p = malloc(10);     sizeof(p) = (4)

大家好,以上题目我困惑了好久,我不知道sizeof(p)为什么等于4.我认为malloc开辟10个字节的空间.  sizeof(p)就应该等于10啊. 为什么等于4呢?


2、在32为X86平台,下述代码输出结果是?
unsigned int i=1;
unsigned int j=2;
printf(“0x%08x\n”,i-j);
if(i-j>0){
    printf(“%d > %d”, i , j);
}else{
    printf(“%d <= %d”, i, j);
输出为_______,_________.      

以上题目我不懂得地方是%08x 是怎么处理的?  然后我再VC上运行的结果是 0xffffffff,1>2的结果.  不知道为什么.   请高手指点.  我第一次来这论坛.希望得到大家指点.
谢谢.

2012-06-27 22:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你看看自己定义的p是什么东西

授人以渔,不授人以鱼。
2012-06-28 12:37
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 2楼 TonyDeng
P是指针啊.
而且我在VC上编了代码去执行也是4啊.
#include<stdio.h>
void main(){
   void *p=malloc(10);
   printf("%d",siezeof(p));
}
2012-06-28 13:11
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 2楼 TonyDeng
请帮忙认真解答这两道题目嘛。      不要觉得简单。 对于我来有点难。   谢谢。
2012-06-28 13:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是指针,求指针的尺寸就是4字节,无论指针指向的数据是多大,它的sizeof()都是4字节。不要把指针和指针所指向的数据混为一谈,这就是我给你的答案!

授人以渔,不授人以鱼。
2012-06-28 13:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
第二个问题:i=1,j=2,i-j=-1,强制为unsigned int是多少?

授人以渔,不授人以鱼。
2012-06-28 13:18
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 6楼 TonyDeng
2、在32为X86平台,下述代码输出结果是?
 unsigned int i=1;
 unsigned int j=2;
 printf("0x%08x\n",i-j);
 if(i-j>0){
     printf(“%d > %d”, i , j);
 }else{
     printf(“%d <= %d”, i, j);
 输出为_______,_________.      

以上题目我不懂得地方是%08x 是怎么处理的?  然后我再VC++6.0上运行的结果是 0xffffffff,1>2的结果.

1:第一个题目明白了. 谢谢了.

2:你说强制  unsigned int  -1 以%08x格式输出, 我真不知道.  请点明一下?        谢谢版主咯.  




 
2012-06-28 18:09
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 6楼 TonyDeng
请看附件
2012-06-28 18:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你要学会查资料才成。printf()函数的输出格式符是约定的,%08x,x表示以无符号十六进制形式输出数字,08表示输出凑足8位数字形式,高位补零,补够8位。

授人以渔,不授人以鱼。
2012-06-28 18:29
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 9楼 TonyDeng
我明白了. 但是在VC++6.0上运行的结果是为什么是 0xffffffff, 1>2的结果   

i-j= -1 转化成16进制也不可能是0xffffffff 啊?   而且 if(i-j)必然小于0  结果怎么会是1>2 呢?

就最后这点困惑了。


请版主帮忙分析
Many
thanks


2012-06-28 18:59
快速回复:初来乍到, 有问题请教
数据加载中...
 
   



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

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