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

时间:2015-06-05 11:38:00

标签: c++

为什么以下programm的输出是“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;
}

3 个答案:

答案 0 :(得分:2)

在C函数中,参数按值传递。这意味着您在fun()内部使用的是a的副本,而不是原始变量。这意味着,您未在ptr内修改fun()。只有它的副本存储在a的本地。此变量(即a)在fun()之外不可见,也未对其进行任何修改。

现在,const char *a表示a是指向内存中包含只读字符的位置的指针。这意味着您无法修改这些字符。但是,您可以修改a指向的内容,这就是您正在做的事情。

答案 1 :(得分:1)

您不修改任何字符串,只修改参数a 首先,它是指向传递值的指针,然后它是程序中字符串常量的指针 您无法更改传递的字符串数据,但更改指针就可以了。

答案 2 :(得分:1)

ptr是一个指向char数组的指针。 指针是const,但不是他指向的内容。 你可以通过这样做来改变内容:

ptr = "AnotherThing"

但是你无法改变指针所指向的内存方向。

如果你试试这个,你会收到一个错误:

* ptr =&#39; C&#39;;