基于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\n", *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
基于Visual C++2013拆解世界五百强面试题--题17-程序结果分析1的更多相关文章
- 基于Visual C++2013拆解世界五百强面试题--题18-程序结果分析2-终结篇
第二部分程序结果分析,分析流程还是写入代码注释中 分析下面程序的输出: #include <stdio.h> int main() { char *a = "hello" ...
- 基于Visual C++2013拆解世界五百强面试题--题3-打印螺旋数组
请用C语言实现 输入N,打印N*N矩阵 比如 N = 3, 打印: 1 2 3 8 9 4 7 6 5 N = 4, 打印 1 2 3 4 12 13 14 5 11 16 ...
- 基于Visual C++2013拆解世界五百强面试题--题2-输出和为一个给定整数的所有组合
请用C语言实现 输出和为一个给定整数的所有组合 启动2012 /* 请用C语言实现 输出和为一个给定整数的所有组合 */ #include <stdio.h> //包含头文件stdio.h ...
- 基于Visual C++2013拆解世界五百强面试题--题1-定义各种类型指针
用变量a给出下面的定义 a)一个整型数 b)一个指向整型数的指针 c)一个指向指针的指针,它指向的指针是指向一个整型数 d)一个有10个整型数的数组 e)一个有10个指针 ...
- 基于Visual C++2013拆解世界五百强面试题--题16-进制分析
清写出下列代码的输出内容 #include <stdio.h> int main() { int a = -1, b = -12, c = -123, d = -1234; printf( ...
- 基于Visual C++2013拆解世界五百强面试题--题15-递归相加
有一分数序列: 1/2 , 1/4 , 1/6 , 1/8 ......,用递归的方法,求此数列20项之和. 可以看出规律:每一项位1/n*2 这个很容易些递归,但是要注意一点,使用浮点数相除保存: ...
- 基于Visual C++2013拆解世界五百强面试题--题14-循环删除
有一个数组a[1000]存放0-1000,要求每隔二个数删除一个数,到末尾时循环到开头继续进行,求最后一个被删掉数的原始下标. 看到题目可以用循环链表保存这些数,然后循环删除,大大减少了一些复杂的边界 ...
- 基于Visual C++2013拆解世界五百强面试题--题13-找最大公共子字符串
编程实现:找出两个字符串中最大公共子字符串,如"abccade"和"dgcadde"的最大子字符串为"cad". 如果不考虑效率的话直接比较 ...
- 基于Visual C++2013拆解世界五百强面试题--题12-进制转换
编程实现,把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数. 转换成二进制,直接循环移位依次取每一位,判断1或0然后将相应字符放入字符串缓冲区中. 对于十六进制, ...
随机推荐
- SGU 101.Domino( 欧拉路径 )
求欧拉路径...直接dfs即可,时间复杂度O(N) -------------------------------------------------------------------------- ...
- Hadoop学习之自定义二次排序
一.概述 MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往 往有要对reduce输出结果进行二次排 ...
- MySQL varchar和char类型
varchar和char是两种最主要的字符串类型.不幸的是,很难精确地解释这些值是怎么储存在磁盘和内存中的,因为这根存储引擎的具体实现有关.下面的描述假设使用的存储引擎是InnoDB或者MyISAM. ...
- 机器学习算法实现(R&Python code)
Machine Learning Algorithms Machine Learning Algorithms (Python and R) 明天考试,今天就来简单写写机器学习的算法 Types Su ...
- Yii2.0中文开发向导——自定义日志文件写日志
头部引入log类use yii\log\FileTarget; $time = microtime(true);$log = new FileTarget();$log->logFile = Y ...
- 利用python进行数据分析之数据加载存储与文件格式
在开始学习之前,我们需要安装pandas模块.由于我安装的python的版本是2.7,故我们在https://pypi.python.org/pypi/pandas/0.16.2/#downloads ...
- “use strict”对js的影响
一:全局变量显示声明 在正常模式下,如果一个变量没有声明就赋值,默认是全局变量,严格模式禁止用这种方法.全局变量必须显示声明. ; i++) { function f2() { } // 语法错误 } ...
- 学会了 C 语言真的可以开发出很多东西吗?
马里奥碰到花朵就变身. 什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有.什么是花?一个 16 × 16 的正方形.什么是「变身」?把马里奥这个方块里面代表衣 ...
- IOS 特定于设备的开发:检查设备接近度和电池状态
UIDevice类提供了一些API,使你能够跟踪设备的特征,包括电池的状态和接近度传感器.他们二者都以通知的形式提供更新,可以订阅他们,以便在有重要的更新时通知你的应用程序. 1>启动和禁用接近 ...
- JAVA泛型-擦除
package com.xt.thinks15_7; import java.util.Arrays; class EraseObject1<A> { } class EraseObjec ...