为什么以下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;
}
答案 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;;