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

原创 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用法总结)

const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性 指向常量的指针: const int *pa; int const *pa; ...

C++ 指针常量、常量指针和常指针常量

1、指针常量 如果在定义指针变量时候,指针变量前用const修饰,被定义的指针变量就变成了一个指针类型的常变量,指针类型的常变量简称为指针常量。 格式如下 数据类型  *   const  指针变...

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

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

常指针和指向常量的指针的区别

最近在学习引用,有一些学习心得,记录如下: 1.引用是变量的别名 int a; int b&=a; 要注意引用只有声明,而没有定义,并且引用必须在声明的时候进行初始化,一旦与某个变量关联起来,...

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

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

字符串指针与字符数组的区别(一)--字符串常量的值不能改

经常犯错的知识点,以前也没有理解,这里再好好的记录下。要经常温固而知新。  用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题: 1.     字符...

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

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

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

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

字符数组 字符指针 字符串常量

转自:http://blog.sina.com.cn/s/blog_71fa0df50100p0qu.html char *c="chenxi"; 书上说: "chenxi"这个字符串被当作常...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串常量指针、常量指针和指针常量区别
举报原因:
原因补充:

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