分类: C/C++
2011-05-16 16:08:46
/*
*百度曾经的一道笔试题,
*整理:Lzy 2011-5-15
*/
#include
int main()
{
char *p = "lzy";
*(p+1) = 'Z';
printf("%s\n",p);
return 0;
}
百度曾经的一道C语言笔试题,主要考察程序员对指针的理解。
问:编译能通过,但程序运行会出错!这是为会么呢?(为什么会这样呢)
答:因为指针p指向的是常量(char *p = "lzy"),不能给常量赋值(*(p+1) = 'Z';)
/*
*华为曾经的一道笔试题,
*整理:Lzy 2011-5-15
*/
#include
int *fun(void)
{
int data = 5;
return &data;
}
int main()
{
int *p;
p = fun();
printf("%d\n",*p);
printf("%d\n",*p);
return 0;
}
华为曾经的一道C评议笔试题
问:两次输出结果是?Why?
答:第一次输出是5,这点毫无疑问。第二次输出的是初始化值(这值与环境有关),因为fun函数返回的地址是fun局部变量data的地址,当fun函数返回后分配的栈空间释放,访问时相应的内存空间被初始化,
gududesiling2011-05-18 22:40:14
呵呵,楼主这两道题非常不错,学习了。
关于第一道题:如果改成这样的话,就可以了,呵呵:
#include <stdio.h>
int main()
{
//char *p = "lzy";
char ch[]="lzy";
char *p=ch;
*(p+1) = 'Z';
printf("%s\n",p);
return 0;
}
gududesiling2011-05-18 22:34:30
你好: “第一次输出是5,这点毫无疑问”,为什么会毫无疑问呢?第二次输出的是初始化值(这值与环境有关),因为fun函数返回的地址是fun局部变量data的地址,当fun函数返回后分配的栈空间释放,怎么是第二次访问时出问题呢?拿第一次访问时又如何解释,我认为第一次访问时和第二次访问时应该一样(函数调用完后,对应的data都应该是释放了呀,访问*p中的内容不都是一个系统初始化的值么?)