在初始化const char数组时,我尝试更改字符串,并且能够毫无问题地对其进行更改。
我正在学习如何初始化const char数组。 我认为我在这里犯了一些我找不到的错误。
class Results:
res = 0
clas= Results()
setattr(clas, 'res', 3+2*4)
print(clas.res)
输出:
第一次初始化:wwww.google.com
第二个初始化:ss->在这里,我希望它会引发错误
答案 0 :(得分:3)
const char* s = "Hi";
告诉编译器指针所指向的 content 是常量。这意味着s[0] = 'P';
将导致编译错误。但是您可以修改指针。另一方面,
char* const s = "Hi";
告诉编译器指针是恒定的。这意味着s = "Pi";
将导致编译错误。但是,当您尝试修改字符串 *
您的代码描述的是前者的行为,而不是您似乎想的那样的行为
*修改字符串文字将调用未定义的行为
答案 1 :(得分:2)
const char *strs[10];
strs
是10个指向const char
的指针的数组。您可以更改指针;你不能改变字符
strs[2] = NULL; // ok: change the pointer
strs[0][0] = '#'; // wrong; cannot change the char
也许尝试
const char * const strs[10] = {"www.google.com",
"https://www.google.com",
"www.google.com/",
"https://www.google.com/",
NULL, NULL };
这使strs
组成10个指向const char
的只读指针的数组。初始化后不能更改指针。
答案 2 :(得分:0)
要用简单的英语(不一定100%准确,但可以概念化),这
const char *strs[10];
初始化一个不包含常量元素的连续数组 strs 。因此,可以更改数组中的元素,但不能更改数组本身