【发布时间】:2017-12-08 06:19:15
【问题描述】:
据我所知,如果我们在程序中声明 char*,那么它会从只读区域提供内存,因此我们无法在数组中的任何位置更改 char。
char *ch = "sitaram";
ch[2] = 'y';
上述代码将无法正常运行,因为我们正在更改只读内存。
一种方法是我们可以将 char 数组声明为
char ch[] = "sitaram";
然后我们可以更改索引处的值。
有什么方法可以更改char* 中任何索引处的char 值?
【问题讨论】:
-
char *ch = "sitaram";仅因为向后兼容“功能”而编译。正确的类型应该是const char *ch。正如类型所暗示的那样,您不能修改此字符串。 -
char*是一个指针。当您编写char *ch = "sitaram";时,它会将ch初始化为指向包含字符串文字"sitaram"的char数组的第一个元素。这种区别很重要。指针不是数组,数组也不是指针。 -
区分
char*本身并不是使内存只读的原因也很重要。指针只是指向一个只读的文字值。改为指向可写内存,然后修改作品。将ch更改为char[]而不是char*只会导致在初始化期间将文字数据复制到char[]内存中。