[英]const char pointer modification
我们可以将一个const char *分配给另一个const char *并修改值吗?
const char * c1;
const char * c2 = c1;
以上作业有效吗?
const char*
表示字符串的内容是常量。 您可以使用不同的指针来引用相同的常量内存。 换句话说,指针是具有相同值的不同变量。 请记住,指针的值就是它所指向的内存的地址。
因此,是的,上面的分配是完全有效的。
我想知道这个问题是否与您先前的问题有关 。 您在这里说:
我们可以将一个const char *分配给另一个const char *并修改值吗?
如果“修改值”是指修改字符串的内容(这是您在上一个问题中要执行的操作),那么不能。 在此处给出的示例中,您有两个指针指向相同的恒定内存块。 如果一个指针不能修改该内存,则另一个指针也不能。
const char*
表示指向的字符串是常量。
char const*
表示指针本身是常量。
是的,它是完全有效的。
const char *
表示指针所指向的内容是常量,但是它不会阻止将该指针分配给另一个指针,因为这不会更改原始指针所指向的内容。
这为您提供了两个指向相同内存位置的指针。
|----------|
| c1 |
| | 1000
| 2000 |
|----------|
|
|
|
|
-------------------->|----------|
| num |
-------------------->| | 2000
| | 2 |
| |----------|
|
|
|----------|
| c2 |
| | 3000
| 2000 |
|----------|
您可以随意修改const char *
指针的内容,但请注意,修改声明为const的变量会导致未定义行为 。
您已经知道这一点,但是值得重复: const
限定符仅是编译器的指令。 它与您在运行时的感觉无关。 const
的含义是:“嘿,编译器先生:每当您注意到我以我不是故意的方式修改此变量时,请告诉我。” AFAIK,当编译器看到这种自毁用法时,会发出警告。 我想在这种情况下,您也许能够使编译器发出平坦的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.