我能够修改一个常量字符串

I am able to modify a constant string

本文关键字:一个 常量 字符串 修改      更新时间:2023-10-16

为什么下面程序的输出是"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';