面试系列指针与数组
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字符串填充。所以,它是可以修改的。
相关文章推荐
- C++指针数组和数组指针--笔试面试系列
- 面试笔试系列2-数组指针和指针数组的区别
- C语言 复杂指针的申明问题 数组指针 指针数组 函数指针 指针函数一览无遗! C/C++求职面试必备考点(四)
- 面试100题系列之6给出洗牌的一个算法,并把洗好的牌放在一个整型的数组里
- 面试小记:关于数组和指针的一个笑话
- 鸡啄米:C++编程入门系列之二十七(数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”)
- 微软面试100题系列-数组连续和最大
- 指针与数组 指针系列之三
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
- 鸡啄米:C++编程入门系列之三十一(数组、指针和字符串:对象指针)
- 程序员笔试面试算法题系列--数组
- C++编程入门系列之二十七(数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”)
- C++系列——指针和数组详细分析
- 复习C语言系列二:动态调用函数指针数组
- C++编程入门系列之三十二(数组、指针和字符串:动态内存分配和释放)
- C++ Primer学习系列(2):数组和指针/表达式/语句
- C语言 复杂指针的申明问题 数组指针 指针数组 函数指针 指针函数一览无遗! C/C++求职面试必备考点(四)
- C++语言中数组指针和指针数组彻底分析(系列一)
- (面试)指针与数组的区别
- C++编程入门系列之二十八(数组、指针和字符串:指针的赋值和指针运算)