| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2936 人关注过本帖
标题:初来乍到, 有问题请教
取消只看楼主 加入收藏
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:26 
初来乍到, 有问题请教
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
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
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
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
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 9楼 TonyDeng
...
2012-06-28 21:33
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 11楼 TonyDeng
版主 你好,
1:请看题目: if(i-j>0)  i-j>0肯定是假 应该输出else的内容啊? 但是VC++运行结果却是1>2     而不是1<=2  ???
2:我在计算器里算了却是是FFFFFFFFFFFFFFF.我是这样分析的, -1 化成二进制是:10000001.然后二进制转十六进制是:0x81吧?  怎么是FFFFFFFFFFFFFFF呢???

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);
}

Many Thanks!
2012-06-28 21:44
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 14楼 TonyDeng
我没有说你回答的有问题. 而是我觉得有几个问题不太明白而已!
我已经反复看过理论书,但是没有我想要的结果.
所以找版主你高手指点.

1:if(i-j>0) 我认为是假. 但是实际却...

2:-1确实是得到FFFFFFFFFFFFFFF, 但是怎么转化的呢?

不懂就问,这才好学生.
Thanks.

2012-06-28 21:58
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 15楼 TonyDeng
版主,

第一点我已经明白了 if(i-j>0)  怎么回事.

关于第二点:  -1 转化二进制是: 10000001 吧. 你说高位补1  是怎么回事?
2012-06-28 22:04
快速回复:初来乍到, 有问题请教
数据加载中...
 
   



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

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