zoukankan      html  css  js  c++  java
  • 基于Visual C++2013拆解世界五百强面试题--题17-程序结果分析1

    分析程序结果,分析过程我们就写在程序注释里面。


    写出下列代码的输出内容

    #include <stdio.h> 
    
    int inc(int a)
    {
    	return (++a);
    }
    
    int multi(int *a, int *b, int *c)
    {
    	return (*c = *a *  *b);
    }
    
    typedef int (FUNC1)(int in);
    typedef int (FUNC2)(int *, int *, int *);
    
    void show(FUNC2 fun, int arg1, int *arg2)
    {
    	FUNC1 *p = &inc;//p指针指向inc函数
    	int temp = p(arg1);//调用p后,参数arg1增1返回,下面传进来的参数是10,增1后返回temp=11
    	fun(&temp, &arg1, arg2);//调用fun位传进来multi,调用multi后,前两个参数指向的整数相乘,结构返回到第三个参数
    	printf("%d
    ", *arg2);//即得到结果为*arg2 = 11*10 =110,所以结果是110
    }
    
    int main()
    {
    	int a;
    	show(multi, 10, &a);
    	return 0;
    }

    给出下面程序的答案:

    #include <iostream>
    #include <string.h>
    #include <malloc.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <memory.h>
    typedef struct AA
    {
    	int b1 : 5;
    	int b2 : 2;
    }AA;
    
    int main()
    {
    	AA aa;
    	char cc[100];
    	strcpy(cc, "0123456789abcdefghijklmnopqrstuvwxyz");
    	memcpy(&aa, cc, sizeof(AA));
    	std::cout << aa.b1 << std::endl;
    	std::cout << aa.b2 << std::endl;
    	return 0;
    }
    
    /*
    AA分别用5位和2位存放b1,b2,不到一个字节
    执行完memcpy(&aa, cc, sizeof(AA));后,第一个字节的二进制位
    00110000
    则可以知道
    b1 = 10000
    b2 = 001
    由于b1,b2都是int类型,默认转换成32位后会进行符号扩展,扩展后的二进制是
    111111111111111111111111111 10000
    00000000000000000000000000000 001
    转换成十进制则分别为
    -16
    1
    所以输出为
    -16
    1
    */


    程序输出什么结果:

    #include <stdio.h>
    
    char *RetMemory()
    {
    	char p[] = "hellow world";
    	return p;
    }
    
    void Test()
    {
    	char *str = NULL;
    	str = RetMemory();
    	printf(str);
    }
    
    int main()
    {
    	Test();
    	return 0;
    }
    //输出的内容是不确定的,因为临时变量p之行的内容,
    //只在RetMemory中有效,返回指针,指针指向的内容是不可预知的

    分析输出什么结果:

    #include <stdio.h>
    
    int main()
    {
    	int arr[] = { 6, 7, 8, 9, 10 };
    	int *ptr = arr;//初始化ptr指向arr
    	* (ptr++) += 123;//ptr增1后指向7,再之行+=123运算,指向的内容7变为130(这时ptr指针没有变化)
    	printf(" %d %d", *ptr, *(++ptr)); //(参数一般是从右往左入栈,所以先执行右边表达式,ptr指针自增后,指向8)
    	//所以输出结果应该是 8 8
    	return 0;
    }


    如果有什么问题和疑问可以在下面留言互相探讨。

    原题我已经上传到这里了http://download.csdn.net/detail/yincheng01/6461073 ,

    解压密码为 c.itcast.cn




  • 相关阅读:
    Android解析聚合数据之天气预报
    (转)微信小程序开发项目——笑话大全
    如何使用优化代码段替代WordPress插件
    通用礼品卡接口文档(KFC、必胜客、GAP等)
    TP5结合聚合数据API查询天气
    移动端开发者福利-免费收费api收藏
    【小程序】微信小程序开发实践
    一个免费的API-手机号码归属地接口
    KB错误总结
    Java 视频播放
  • 原文地址:https://www.cnblogs.com/new0801/p/6177579.html
Copyright © 2011-2022 走看看