您的位置:首页 > 职场人生

面试系列指针与数组

2012-05-16 19:17 190 查看
#include <stdio.h>

int main(void)
{
char *p = "abcd";
p[1] = 'w';
printf(p);

return 0;
}


编译通过,但是运行时会出现段错误

#include <stdio.h>

int main(void)
{
char str[] = "abcd";
str[1] = 'w';
printf(str);

return 0;
}



编译通过,运行也很正常。

解释:

字符串 abcd 存放在常量区,它只是可读的,不可修改,而指针变量p和数组str都是存放在栈区。

第一个程序声明的指针,指向的数据类型为char,而并没有给这个指针动态开辟一块内存区,

char *p = "abcd";这条语句的动作只是让指针指向存放abcd字符串的常量区,所以,不能修改。而第二个程序声明可一个数组,同样它也是在栈区上的,但是,声明了这个数组后在函数的栈区开辟一个内存区域,同时,将这个内存区用abcd字符串填充。所以,它是可以修改的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐