C++ 结构中的字符串文字显示错误,但当字符串文字声明为常量时,它不会显示错误。为什么?
此程序已编译并运行,但显示错误: ISO C++禁止将字符串常量转换为'char * [-WWORD字符串]C++ 结构中的字符串文字显示错误,但当字符串文字声明为常量时,它不会显示错误。为什么?,c++,data-structures,C++,Data Structures,此程序已编译并运行,但显示错误: ISO C++禁止将字符串常量转换为'char * [-WWORD字符串] #include<iostream> using namespace std; struct person{ char* name; char* lastName; int age; }; void show(person temp){ cout << temp.name << " " << temp.lastName <&
#include<iostream>
using namespace std;
struct person{
char* name;
char* lastName;
int age;
};
void show(person temp){
cout << temp.name << " " << temp.lastName << " age is: " << temp.age;
}
int main(){
// decaring a person
person p;
p.name = "Jayant";
p.lastName = "Sharma";
p.age = 18;
//reassigning of p 'name'
p.name = "Kartik";
show(p);
return 0;
}
// output => Kartik age is: 18
将名称“Kartik”重新分配给同一常量变量“name”时不会出现错误。我看到您对示例源代码感到困惑。然而,我看到两个问题,你没有明确说明,但暗示。所以我会回答这两个问题 C++中的String Literals是什么?
ISO/IEC C++标准将字符串文字定义为const char数组,并且您的示例代码通过声明变量<强> >名称>强>和<强> >“ListNoest<”或“强>”仅违反类型定义,违反了此定义!虽然在C语言中并非如此,但请参阅以了解更多详细信息
即使声明常量,变量的赋值方式是什么? 编译器不会向您抛出错误,因为您没有正确使用const关键字const char*name=“Sharma”;
上面的代码示例说明变量名中的值是常量,但其地址不是常量
const char*const name=“Sharma”;
现在,上面的代码示例说明变量名中的值和地址都是常量
使用“对象成员”操作符时,表示正在操作的内存地址是正在访问的对象的地址加上存储数据的偏移量。因此,您正在通过地址间接地修改变量 因为
“string literal”
是一个常量字符*
,您不能将指向常量的指针分配给指向非常量的指针。C++不这样工作,仅此而已。这就是错误消息所说的,简单地说。您不确定编译器错误消息的哪一部分?@SamVarshavchik从技术上讲,字符串文字是const char[N]
,它会退化为const char*
好的,我明白您的意思了。地址保持不变,但值不同。这就是你想说的…我是不是被描述了?如果是的话,很抱歉。我记得很久以前问过同样的问题。发现object运算符的成员返回的是地址而不是实际值,这让我感到非常惊讶!一点也不,你的描述让我很容易得出结论。所以别担心。
struct person{
const char* name;
const char* lastName;
int age;
};