const char* 和 char* 、字符串常量

您所在的位置:网站首页 char*与char const char* 和 char* 、字符串常量

const char* 和 char* 、字符串常量

2023-08-11 10:17| 来源: 网络整理| 查看: 265

注:凡是说到字符串,基本就是字符串常量。

看到这么一句话:提到const char*,就认为这个指针指向的是字符串。

根据之前对常量指针和指针常量的理解,const char* p,也就是指针指向的是常量,不能通过指针对数值进行修改。也就是*p=XXX,是错误的用法。

为什么const char*就是针对字符串是用的呢,因为这是一个常量指针,字符串是常量,而且是存储在系统负责管理的常量存储区中的,编译器无权对其进行修改。而且又是char类型的指针,还是一个常量指针,自然就能够与字符串联系在一起。

另外一个问题:const char*和char* 有什么区别呢:

详情还是请看下面的程序:

#include #include int main(int argc,char* agrv[]) { printf("1.至此正常执行"); const char* c = "abc";//含义为不能通过指针来修改字符串的值 char* s = "abc"; 注意下面的解释: s是字符串常量“abc”的指针,下面看一下能够修改“abc”? 应该是不能的。因为“abc”是常量,放在常量存储区,这块内存 编译器没有权利管理,是由系统负责管理的,“abc”是不能通过指针进行修改。 从上面可以看出,当针对字符串变量时,const char* s =“abc” 和char* s=“abc”本质上是一样的, 都是指向存储在由系统管理的常量存储区中的指针。虽然 试图通过常量字符串指针更改字符串内容的语法没有报错,但实际上程序也是无法运行的, 这说明,程序编译通过,不代表运行起来就没有问题。 对于const char* s,这样写是更加规范的,编译器直接能够进行语法上的错误检查。 所以如果需要定义一个指向字符串常量(形如“abc”,或单个字符“a”,这样的字符常量)的指针时,规范写法就是const char* 变量名的形式。 写成char* 变量名也可以,只不过用起来和const char* 变量名是一样的,但是const char* 变量名 是一种更加规范的表达方式。 printf("%p\n", s); *(s+1) = "d";//试图通过指针修改“abc”中的元素,语句没有报错, 但是程序走到这一步就不能再运行了,因为这个操作是违法的,虽然语法上没有报错。 printf("2.至此正常执行"); printf("%s\n", s);程序不能运行,没有输出 *(c + 1) = "d";直接提示语法错误,不注释掉程序都无法通过编译 printf("%s\n", *c); return 0; }

从上面的分析可以看出,当指向字符串(常量)时,const char*和char*是没有区别的,但是const char*能更为显示地通过 const 提醒你不能通过指针对常量字符串进行修改,char* 也不能对字符串常量进行修改,但是没有显示的写上const,两者在使用上是一样的。

对于char*, 如果想通过只针对字符串常量进行修改,语法上不会报错,编译也能通过,但是程序运行时将会出现问题。

参考const char* str="abcd" 与 char* str="abcd"有区别吗?-CSDN论坛



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3