C puzzles详解【21-25题】
第二十一题
What is the potential problem with the following C program?
#include <stdio.h>
int main()
{
char str[];
printf("Enter the string:");
scanf("%s",str);
printf("You entered:%s\n",str); return ;
}
题目讲解:
易造成数组越界,scanf改成如下形式比较保险
scanf("%79s",str);
不管输入多少个字节,最多只读取79个字节。
第二十二题
What is the output of the following program?
#include <stdio.h>
int main()
{
int i;
i = ;
printf("i : %d\n",i);
printf("sizeof(i++) is: %d\n",sizeof(i++));
printf("i : %d\n",i);
return ;
}
题目讲解:
输出为:
i: 10
sizeof(i++) is:4
i: 10
sizeof(i++),等效于sizeof(int)。sizeof的值在编译时决定,不会执行i++。
sizeof的更多讲解见第一题。
第二十三题
Why does the following program give a warning? (Please remember that sending a normal pointer to a function requiring const pointer does not give any warning)
#include <stdio.h>
void foo(const char **p) { }
int main(int argc, char **argv)
{
foo(argv);
return ;
}
题目讲解
- 关键字const
用const修饰变量,指定该变量为只读。 const int a = ;//变量a只读 const int *p;//p指向的int型数只读,p可以被修改 int *const p;//p为只读,p指向的int型数可以被修改
- 带const的一级指针和二级指针赋值
int a = ; const int *p; p = &a;//一级const指针赋值时,可以不将右边的指针转换为const型
int *p; const int **pp; pp = (const int **)&p;//二级const指针赋值时,必须将右侧二级指针转换为const型
- 带const的一级指针和二级指针传参
void foo(const char *p) {}
int main()
{
char *p;
foo(p);//p不用转化为const型
return ;
}
void foo(const char **pp) {}
int main()
{
char **pp;
foo((const char **)pp);//pp必须转化为const型
return ;
}
第二十四题
What is the output of the following program?
#include <stdio.h>
int main()
{
int i;
i = ,,;
printf("i:%d\n",i);
return ;
}
题目讲解:
同第十题。
输出: i:1
逗号运算符在所有的运算符中优先级最低,i = 1,2,3等效于(i = 1),2,3
若将”i = 1,2,3”改成”i = (1,2,3)”,i的值为3。
第二十五题(Reverse Polish Notation)
The following is a piece of code which implements the reverse Polish Calculator. There is a(are) serious(s) bug in the code. Find it(them) out!!! Assume that the function getop returns the appropriate return values for operands, opcodes, EOF etc..
#include <stdio.h>
#include <stdlib.h> #define MAX 80
#define NUMBER '0' int getop(char[]);
void push(double);
double pop(void);
int main()
{
int type;
char s[MAX]; while((type = getop(s)) != EOF)
{
switch(type)
{
case NUMBER:
push(atof(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
push(pop() - pop());
break;
case '/':
push(pop() / pop());
break;
/* ...
* ...
* ...
*/
}
}
}
题目讲解:(不确定)
减法的减数和被减数反了,除法的除数和被除数反了。
C puzzles详解【21-25题】的更多相关文章
- C puzzles详解【51-57题】
第五十一题 Write a C function which does the addition of two integers without using the '+' operator. You ...
- C puzzles详解【46-50题】
第四十六题 What does the following macro do? #define ROUNDUP(x,n) ((x+n-1)&(~(n-1))) 题目讲解: 参考:http:// ...
- C puzzles详解【38-45题】
第三十八题 What is the bug in the following program? #include <stdlib.h> #include <stdio.h> # ...
- C puzzles详解【34-37题】
第三十四题 The following times. But you can notice that, it doesn't work. #include <stdio.h> int ma ...
- C puzzles详解【31-33题】
第三十一题 The following is a simple C program to read and print an integer. But it is not working proper ...
- C puzzles详解【26-30题】
第二十六题(不会) The following is a simple program which implements a minimal version of banner command ava ...
- C puzzles详解【16-20题】
第十六题 The following is a small C program split across files. What do you expect the output to be, whe ...
- C puzzles详解【13-15题】
第十三题 int CountBits(unsigned int x) { ; while(x) { count++; x = x&(x-); } return count; } 知识点讲解 位 ...
- C puzzles详解【9-12题】
第九题 #include <stdio.h> int main() { float f=0.0f; int i; ;i<;i++) f = f + 0.1f; if(f == 1.0 ...
随机推荐
- 注意,ruby循环体定义的变量在结束时后,变量还存在
a = [1, 2, 3] for i in a b = 123 p i end p "b:#{b}" p i <ruby语言编程> 129页 倒数 第8行
- python异常类型
python2: BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- Stop ...
- Java中的JDBC基础
简介 JAVA程序想要对数据库进行访问,需要有JDBC驱动程序的支持.JDBC驱动程序提供了对各种主流数据库的接口,程序员只需要学习掌握这一套接口,就可以实现对所有数据库的访问代码编写. 一般步骤 J ...
- 虚拟机与CentOS的安装设置。
点击下一步: 点击稍后安装操作系统. 选择Linux系统,继续下一步 为了方便以后查找文件我们在这把虚拟机的名称改成自己喜欢的, 位置也是在大点的磁盘重新建一个专门存放的文件夹,做到规范. 在这推荐N ...
- Prevent Adding Component More than once
Question: I'm developing a C# component, I want to prevent the user from adding this component to th ...
- flash 读取系统默认编码
java有类可以直接读取,但貌似flash没有. Charset.defaultCharset(); 但是浏览器里可以有. document.defaultCharset;//从当前的区域语言中获取默 ...
- [HackerCup Round1 2] Autocomplete (Trie)
题目链接:https://www.facebook.com/hackercup/problems.php?pid=313229895540583&round=344496159068801 题 ...
- hbase的rowkey简单设计
问题: 需要查询某一用户某时间做了什么,PlatID和vopenid可以保证一个用户唯一,但同一时间同一用户可能日志有多条. 使用PlatID(int).vopenid(int)和dtTime(dat ...
- Battery-historian 参数说明
部分参数说明 battery_level 电量,可以看出电量的变化.比如上图中的数据显示刚开始电量是100%,然后在第11秒-12秒中间的某个时刻降到了99%. plugged 充电状态,这一栏显示是 ...
- python-appium手机自动化测试(仅需安装包)前期准备(pydev-eclipse编辑器)
1.jdk安装与环境变量配置教程http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 我本机安装的是1.6.043 2.sdk下 ...