我能够修改一个常量字符串
I am able to modify a constant string
为什么下面程序的输出是"pankaj",我期待一个编译错误,如"不能修改一个常量字符串"
#include<iostream>
using namespace std;
void fun(const char *a)
{
a = "pankaj";
cout << a;
}
int main()
{
const char *ptr = "GeeksforGeeks";
fun(ptr);
return 0;
}
在C函数中,参数是按值传递的。这意味着在fun()
中,您使用的是a
的副本,而不是原始变量。这意味着,你没有在fun()
中修改ptr
。只有它的副本存储在a
本地。这个变量,即a
,在fun()
之外是不可见的,也不能对它进行任何修改。
现在,const char *a
意味着a
是一个指针,指向内存中包含只读字符的位置。这意味着,不能修改这些字符。但是,您可以修改a
指向的内容,这就是您正在做的。
您没有修改任何字符串,只修改参数a
。
首先,它是一个指向传递值的指针,然后它是一个指向程序中字符串常量的指针。
你不能改变传递的字符串数据,但是改变指针是可以的
ptr是指向char数组的指针。指针是const,但不是他所指向的内容。你可以这样修改内容:
ptr = "AnotherThing"
但是你不能改变指针指向的内存方向。
如果你尝试这样做,你会得到一个错误:
*ptr = 'C';
相关文章:
- 用C++中的一个变量定义一个常量
- 从另一个常量标准::映射初始化一个常量标准::映射的一部分
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- C++ 在 none 常量指针函数中返回一个常量指针
- 为什么重载"<<"需要一个常量参数?
- 为什么它是一个常量指针而不是指向常量指针
- 是一个常量句柄真的常量
- 将一个常量cstring附加到我自己的String类对象
- C++在类构造函数中定义了一个常量成员变量
- G++抱怨constexpr函数不是一个常量表达式
- 是一个常量字符串Still Preferrable
- 返回一个常量字符 *
- 将一个常量未签名的长流流式传输到流
- 从自定义 printf 函数返回一个常量字符*
- C++做虚函数总是必须是一个常量
- 我想将一个常量字符串写入包含另一个输入数据块的文件
- 如何计算初始化一个常量数组(制作常量查找表)
- C++:在初始化列表中传递一个常量 *p
- 我可以在 protobuf 中定义一个常量字符串吗?
- 初始化一个常量变量,如果失败则断言(c++)