我们可以将一个const char *分配给另一个并修改值吗?
const char * c1;
const char * c2 = c1;
以上作业是否有效?
答案 0 :(得分:2)
const char*
表示字符串的内容是常量。你可以有不同的指针引用相同的常量内存。换句话说,指针是具有相同值的不同变量。请记住,指针的值是它所引用的内存的地址。
所以,是的,上面的作业完全有效。
我想知道这个问题是否与您的previous question有关。你在这里说:
我们可以将一个const char *分配给另一个并修改值吗?
如果通过“修改值”意味着修改字符串的内容(这是您在上一个问题中想要做的事情),那么不能。在这里给出的示例中,您有两个指针指向相同的常量内存块。如果其中一个指针无法修改该内存,那么另一个指针也无法修改。
答案 1 :(得分:1)
const char*
表示指向的字符串是常量。
char const*
表示指针本身是常量。
答案 2 :(得分:0)
是的,这完全有效。
A const char *
表示指针指向的内容是常量,但它不会停止将指针分配给另一个指针,因为这不会更改原始指针指向的内容。
这为您提供了两个指向相同内存位置的指针。
|----------|
| c1 |
| | 1000
| 2000 |
|----------|
|
|
|
|
-------------------->|----------|
| num |
-------------------->| | 2000
| | 2 |
| |----------|
|
|
|----------|
| c2 |
| | 3000
| 2000 |
|----------|
您可以破解并修改const char *
指针的内容,但请注意,修改声明为const的变量会导致未定义的行为。
答案 3 :(得分:0)
你已经知道了,但值得重复一遍:const
限定符只是编译器的指令。它与你在运行时所做的任何事都没有任何关系。 const
的意思是:“嘿,编译器先生:只要你注意到我以一种我不想要的方式修改这个变量,就告诉我。” AFAIK,编译器在看到这种自毁使用时会发出警告。我想你可能会让编译器在这种情况下发出一个完全错误的错误。