字符串常量指针、常量指针和指针常量区别

原创 2016年08月30日 23:34:30
char *p = "abcd";
*p = 'b';
printf("%c\n", p[0]);


以上代码有什么问题?   
首先,编译器在常量区保存一个字符串abcd,其内容不许修改。
char *p = "abcd"; // p是一个指针,直接指向常量区,修改p[0]就是修改常量区的内容,这是不允许的。
char p[] = "abcd"; // 编译器在栈上创建一个字符串p,把abcd从常量区复制到p,修改p[0]就是修改一个局部变量,这是允许的。
采用指针存储字符串,其实质就是把字符串的首地值附给基类型为char的指针变量,从而可以从字符串首元素开始对字符串进行操作,这里面也存在一点问题.
运行结果会出现段错误,原因在于,*p="abcd" 这句仅仅声明了一个指针变量,指向字符串"abcd",而"abcd"这个字符串程序没有给它分配空间,编译器把它分配到常量区.而常量字符串的值是不允许被修改的 ,所以会出现段错误.
应该:


char p[12]="abcd";
char *p1=p;
p1[0]='H';
printf("%s\n",p1);
p[12]="hello world"

自己定义的一个长度为12的字符数组,所以字符串"abcd"编译器会给它分配空间(在栈中),所以你能修改它的值. 


另外:常量指针和指针常量的区别详解

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

常量指针和指针常量的区别详解

在C/C++中关键字const用来定义一个只读的变量或者对象,有如下优点     (1)便于类型检查,如函数的函数 fun(const int a) a的值不允许变,这样便于保护实参。     (...

指针到底能不能修改其指向的常量字符串?

1.指针到底能不能修改其指向的常量字符串?今天做一个字符串右移函数时,直接使用指针来修改字符串常量的值出现了奇怪运行时错误。 代码如下:#include"stdio.h" #include"stri...

字符串常量指针与字符数组的区别

转自:http://hi.baidu.com/zengzhaonong/blog/item/b50db67774cb5318b151b93a.html 数组要么在静态存储区被创建(如全局数组),...

字符串指针和字符数组,静态全局、静态局部、全局和局部变量区别,字符串常量和字符串变量,程序的内存分配

C语言学习中的知识点,字符串指针和字符数组的区别,静态全局变量、静态局部变量、全局变量和局部变量的区别, 有错误的地方请大家指正! 以下程序用VC++6.0调试 先说说字符串指针和字符数组的区别 1....

c指针学习——之字符串常量

自己学习的时候,编写了一个小的指针练习: int main(void) { char* s1 = "Hello, World!"; char* s2 = "123456"; printf(s1)...

函数的返回类型为指针类型时的若干思考(字符串常量问题)

By zieckey (http://blog.chinaunix.net/u/16292/index.html) 问题的引入: 看看下面的程序的输出: #inc...

对字符数组,字符指针,字符串常量以及其sizeof的一些总结

对字符数组,字符指针,字符串常量以及其sizeof的一些总结 在网上经常看到一些类似字符串或者sizeof等的公司笔试题,鄙人不才,但也作了一些总结, 这些总结都是在vc2003下测试得到的结...

"显微镜"下细看字符串常量初始化数组和指针

先看代码: 1: #include "stdafx.h" 2: #include 3:   4: usin...

每日一c,对指针,数组,字符串常量之间的梳理(一)

时间:2017.5.31    21:24 万丈高楼平地而起,学好IT,得把纯c基础打牢实了。最近,乘着还有空闲时间,从新梳理哈自己的纯C关系树。一边学习一边记录,蛮不错的 指针与数组的相同与...

字符数组,字符指针,字符串常量以及其sizeof的一些总结

1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符。 如在代码中写"abc",那么编译器帮你存储的是"abc\0"。 2. "abc"是常量吗?-----------注...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)