| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3157 人关注过本帖, 1 人收藏
标题:几个问题,大家解解看
只看楼主 加入收藏
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
结帖率:0
收藏(1)
 问题点数:0 回复次数:74 
几个问题,大家解解看
以前做过的几个问题,觉得挺有意思,再贴出来,共赏。

////问题:为什么打印不出数组元素?
  #include<stdio.h>
  #include <stdlib.h>
  int array[] = {23,34,12,17,204,99,16};
  #define COUNTS (sizeof(array) / sizeof(array[0]))


  int main()
  {
      int d;

      for(d=-1;d <= (COUNTS-2);d++)
          printf("%d\n",array[d+1]);

      system("PAUSE");
      return 0;
  }


//问题2:下面的程序是合法的吗?如果是,输出是什么?为什么?
#include <stdio.h>
#include <stdlib.h>
int main()
{
        int i=43;
        printf("%d\n",printf("%d",printf("%d",i)));
        system("PAUSE");
        return 0;
}

//问题3:下面的程序是什么作用?原理是什么样的?
#include <stdio.h>
#include <stdlib.h>

int noName(unsigned int x)
{
    int count=0;
    while(x)
    {
         count++;
         x = x&(x-1);
     }
     return count;
 }

int main()
{
        printf("%d\n", noName(167));
        system("PAUSE");
        return 0;
}

//问题:下面程序的输出是什么?为什么?
  #include <stdio.h>
  #include <stdlib.h>
  int main()
  {
       float a = 12.5;
       printf("%d\n", a);
       printf("%d\n", *(int *)&a);
       system("PAUSE");
       return 0;
  }

//问题:下面的程序输出结果是什么?为什么?
  #include <stdio.h>
  #include <stdlib.h>
  #define SIZE 10
  void size(int arr[SIZE])
  {
       printf("size of array is:%d\n",sizeof(arr));
  }

  int main()
  {
       int arr[SIZE];
       size(arr);

       system("PAUSE");
       return 0;
  }

搜索更多相关主题的帖子: 解解 
2010-07-31 10:26
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
第一题:
程序代码:
  for(d=-1;d <= (COUNTS-2);d++)
004113D5  mov         dword ptr [d],0FFFFFFFFh

004113DC  jmp         main+37h (4113E7h)

004113DE  mov         eax,dword ptr [d]

004113E1  add         eax,1

004113E4  mov         dword ptr [d],eax

004113E7  cmp         dword ptr [d],5

004113EB  ja          main+61h (411411h) 
直接跳出循环。
2010-07-31 12:19
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
第二题:int printf(const char *format,...), 从函数原形就能看出端倪。完全可以用这样的方法来替代:
int i = 43;
int a = printf("%d", 43);
int b = printf("%d", a);
int c = printf("%d", b);
printf("%d", c);


[ 本帖最后由 zisefengye 于 2010-7-31 12:25 编辑 ]
2010-07-31 12:24
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
第三题:逻辑与,也就是有0则1,全1才1,用二进制来看就能明白。
第一次: 10100111 & 10100110 = 10100110
第二次: 10100110 & 10100101 = 10100100
第三次: 10100100 & 10100011 = 10100000
第四次: 10100000 & 10000001 = 10000000
第五次: 10000000 & 01111111 = 0
2010-07-31 12:38
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
第四题:
*(int *)&a,获取a的地址(且把a的地址转换成int型的地址)中存放的内容。前面的部分挺诡异的,取不同的小数值会有变化,基本取.5的都输出0
2010-07-31 13:23
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
第五题,数组与指针的问题,经过函数参数的传递,相当与求sizeof(int*),即等于4。
2010-07-31 13:41
黑之牙
Rank: 2
等 级:论坛游民
帖 子:27
专家分:24
注 册:2009-7-17
收藏
得分:0 
回复 2楼 zisefengye
第一题 的汇编代码 看不懂,能解释一下吗
2010-07-31 19:49
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
#define COUNTS ((int)(sizeof(array) / sizeof(array[0])))

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2010-07-31 20:04
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
//问题2:下面的程序是合法的吗?如果是,输出是什么?为什么?
#include <stdio.h>
#include <stdlib.h>
int main()
{
        int i=43;
        printf("%d\n",printf("%d",printf("%d",i)));//printf返回值是打印的字符数
        system("PAUSE");
        return 0;
}

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2010-07-31 20:07
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 8楼 Knocker
原来如此,有个隐式转换。果然够猥琐。/

我就是真命天子,顺我者生,逆我者死!
2010-07-31 20:10
快速回复:几个问题,大家解解看
数据加载中...
 
   



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

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