第二部分程序结果分析,分析流程还是写入代码注释中

分析下面程序的输出:

#include <stdio.h>

int main()
{
char *a = "hello";
char *b = "hello";
if (a == b)
printf("YES");
else
printf("NO");
//由于a、b指针指向的常量字符串相同,编译器为了节省空间,
//将a、b指针变量都指向了hello字符串所在的内存位置
return 0;
}

分析下面代码,输出什么结果:

#include <stdio.h>

int func(int a)
{
int b;
switch (a)
{
case 1: 30;
case 2: 20;
case 3: 16;
default: 0;
}
return b;
} int main()
{
printf("%d", func(1));
//输出结果随机,因为b变量没有初始化,也没有赋值,直接返回了
return 0;
}

写出程序运行结果:

#include <stdio.h>

int sum(int a)
{
//auto int c = 0; vs2013不能用这种方式声明auto变量
auto c = 0;
static int b = 3;
c += 1;//每次调用函数是c最后都等于1
b += 2;//因为b是静态变量,所以第一次调用函数时b等于5,以后每次调用b增加2
return (a + b + c);
} int main()
{
int i;
int a = 2;
for (i = 0; i < 5; i++)
{
printf("%d,", sum(a));//所以第一次调用sum结果是2+1+5=8,第二次调用2+1+7=10,以此类推,输出结果为8,10,12,14,16,
}
return 0;
}

写出程序输出结果:

#include <stdio.h>

void g(int **);

int main()
{
int line[10], i;
int *p = line;
for (int i = 0; i < 10; i++)
{
*p = i;
g(&p);//调用后相当于p[0]++=i,p++
}
for (int i = 0; i < 10; i++)
printf("%d\n", line[i]);//所以最后输出结果为1,2,3,4,5,6,7,8,9,10 return 0;
} void g(int **p)
{
(**p)++;//让传进来的二级指针最终指向的值自增
(*p)++;//让传进来的指针自增
}

分析下面程序的输出结果:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
} int main()
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
free(str);//str指向的内存被释放了,但是str值没变,肯定不为NULL
if (str != NULL)
{
strcpy(str, "world");//这里很可能奔溃,如果没有奔溃向下之行
}
printf("\n str is %s", str);//输出 str is world return 0;
}

此系列题目已经结束,如果有什么问题和疑问可以在下面留言互相探讨。

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

解压密码为 c.itcast.cn

基于Visual C++2013拆解世界五百强面试题--题18-程序结果分析2-终结篇的更多相关文章

  1. 基于Visual C++2013拆解世界五百强面试题--题17-程序结果分析1

    分析程序结果,分析过程我们就写在程序注释里面. 写出下列代码的输出内容 #include <stdio.h> int inc(int a) { return (++a); } int mu ...

  2. 基于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   ...

  3. 基于Visual C++2013拆解世界五百强面试题--题2-输出和为一个给定整数的所有组合

    请用C语言实现 输出和为一个给定整数的所有组合 启动2012 /* 请用C语言实现 输出和为一个给定整数的所有组合 */ #include <stdio.h> //包含头文件stdio.h ...

  4. 基于Visual C++2013拆解世界五百强面试题--题1-定义各种类型指针

    用变量a给出下面的定义    a)一个整型数    b)一个指向整型数的指针    c)一个指向指针的指针,它指向的指针是指向一个整型数    d)一个有10个整型数的数组    e)一个有10个指针 ...

  5. 基于Visual C++2013拆解世界五百强面试题--题16-进制分析

    清写出下列代码的输出内容 #include <stdio.h> int main() { int a = -1, b = -12, c = -123, d = -1234; printf( ...

  6. 基于Visual C++2013拆解世界五百强面试题--题15-递归相加

    有一分数序列: 1/2 , 1/4 , 1/6 , 1/8 ......,用递归的方法,求此数列20项之和. 可以看出规律:每一项位1/n*2 这个很容易些递归,但是要注意一点,使用浮点数相除保存: ...

  7. 基于Visual C++2013拆解世界五百强面试题--题14-循环删除

    有一个数组a[1000]存放0-1000,要求每隔二个数删除一个数,到末尾时循环到开头继续进行,求最后一个被删掉数的原始下标. 看到题目可以用循环链表保存这些数,然后循环删除,大大减少了一些复杂的边界 ...

  8. 基于Visual C++2013拆解世界五百强面试题--题13-找最大公共子字符串

    编程实现:找出两个字符串中最大公共子字符串,如"abccade"和"dgcadde"的最大子字符串为"cad". 如果不考虑效率的话直接比较 ...

  9. 基于Visual C++2013拆解世界五百强面试题--题12-进制转换

    编程实现,把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数. 转换成二进制,直接循环移位依次取每一位,判断1或0然后将相应字符放入字符串缓冲区中. 对于十六进制, ...

随机推荐

  1. Httpservlet cannot be resolved to a type

    这个问题与上个问题可以说是“错的类似”.解决方案:就是在Tomcat的lib目录下加入servlet-api.jar 即可.

  2. NOPI导出Excel 自定义列名

    NOPI 做Excel 导出确实很方便 ,但是一直在用没好好研究. 在网上没找到自定义Columns的方法 ,于是乎自己就在原来的方法上简单地改改. 想用的童鞋们可以直接拿去用! /// 数据大于65 ...

  3. 原生js判断某个元素是否有指定的class名的几种方法

    [注意]以下方法只对class只有一个值的情况下操作 ************************************************************* 结构部分: <d ...

  4. Spark学习之RDD的理解

    转自:http://www.infoq.com/cn/articles/spark-core-rdd/ 感谢张逸老师的无私分享 RDD,全称为Resilient Distributed Dataset ...

  5. The following classes could not be found: - android.support.v7.internal.widget.ActionBarOverlayLayou解决方案

    如图出现如下的错误的时候,一般都是升级Androdi Studio 后导致的,引入库不全,或者其他 东西缺少,可以如下解决方案: 或者如下的解决方案: 在布局文件的Design界面中,修改原来的App ...

  6. SQL Server 中大小写区分的处理

    SQL Server 中大小写区分的处理. 默认情况下,SQL Server 里面是不区分大小写的: E:\>sqlcmd -S "localhost\SQLEXPRESS" ...

  7. 四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现

    原文:四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现 虽然说现在官方的自带插件已经有很多了,但是有时候往往不能满足我们 ...

  8. 如何从 0 开始学 ruby on rails (漫步版)

    如何从 0 开始学 ruby on rails (漫步版) ruby 是一门编程语言,ruby on rails 是 ruby 的一个 web 框架,简称 rails. 有很多人对  rails 感兴 ...

  9. [每日一题] OCP1z0-047 :2013-08-22 正则表达式---[^Ale|ax.r$]'

    正确答案:DE 一.Oracle正则表达式的相关知识点 '[^Ale|ax.r$]': ^:匹配行的开始字符 $:匹配行的结束字符 []:方括号表示指定一个匹配列表,该列表匹配列表中显示的任何表达式. ...

  10. linux进程之fork 和 exec函数

    ---恢复内容开始--- fork函数 该函数是unix中派生新进程的唯一方法. #include <unistd.h> pid_t   fork(void); 返回: (调用它一次, 它 ...