C++字符串赋值给字符指针的问题 您所在的位置:网站首页 指针怎么赋值字符串数组 C++字符串赋值给字符指针的问题

C++字符串赋值给字符指针的问题

2023-09-19 07:02| 来源: 网络整理| 查看: 265

首先,答案是:不可以直接赋值。

其实我原本对C++的字符串、字符指针和字符数组理解并不深刻,结果这次就遇到了问题:字符串传参给字符指针变量出错。

字符串

C++中有字符串类(虽然我本人不怎么用,函数传参一直在用字符指针)。比如"hello",用双引号括起来的是“字符串常量”,注意,它是常量。如果引用了来声明字符串对象string s = "hello",则是变量。

字符指针

这个比较简单,就是指向字符变量的指针。

字符数组

由字符组成的数组。这里的数组名a表示的是数组首元素的地址,是个常量,而数组内的是字符变量。

1 char a[5]; 有关字符串赋值字符指针的问题

我在很多地方都看到过下面这种写法

1 char *a = "hello";

问题来了,在我这用g++编译的时候有warning,并且程序运行的结果错误。

warning: ISO C++ forbids converting a string constant to ‘char*’

"hello"是字符串常量,拿来赋值时这个字符串常量返回的是首字符的地址,这个地址上的值(字符)是常量,不可变。而a是字符指针变量,指向的字符变量是可变的。

如果普通字符指针(指向字符变量)指向了一个不可变的内存区域,那这块内存的值到底是变呢还是不变呢?当然是不变了, 这是人家本身的性质,和我指不指没有关系,况且我不能这么辖指。 因此C++禁止把字符串常量的首地址赋值给字符指针变量。

正确的写法应该是,字符串常量的首地址赋值给常字符指针。

1 const char *a = "hello"; //赋值给常字符指针

或者通过变量数组来完成值的传递。

1 2 char b[] = "hello"; //先把字符串常量赋值给字符数组b char *ptr = b; //字符数组b的首地址赋值给字符指针ptr

为什么第二种方法就行了呢?因为字符串常量赋值给字符数组b的是副本,无论怎样操作字符数组,原本的字符串常量都不会受到影响。而字符数组的元素(字符串中字符的副本)是字符变量,自然就可以把变量的地址赋值给指向变量的指针了。

总结 字符串是常量。 变量指针只能指向变量,不能指向常量。 常量赋值给变量,是副本的形式,所以可以用这个方法来让变量指针指向一个常量副本(“假的常量”)。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有