[英]what happen when constant string assigned to constant character pointer?
将常量字符串分配给常量字符指针(或字符指针)时会发生什么? 例如:
const char* p="String";
编译器如何以及在何处使用此数组..堆内存? 和它有什么不同:
char* p="String";
谢谢。
将常量字符串分配给常量字符指针(或字符指针)时会发生什么?
const字符串本身什么也没有发生:指向它的指针分配给p
,仅此而已。
编译器如何以及在何处使用此数组..堆内存?
它不会带到任何地方。 String的数据保留在原来的位置,这是编译器特有的。
以及与它有什么不同:
char* p="String";
编译器将拒绝将字面量分配给非const的程序,或者警告您不赞成使用的转换,具体取决于C ++版本和/或编译器设置。 如果尝试使用const
声明修改p[...]
的内容,则编译器将阻止您。 如果您尝试在不使用const
的情况下执行相同的操作,则该程序可能会编译,这会在运行时导致未定义的行为。
字符串文字"String"
是程序中某个位置的const char
静态数组,当您的操作系统设置可执行文件时,可能会将其放置在地址空间的只读部分中。
当您分配const char *p = "String"
, p
将使用指向const char
数组的指针进行初始化。 所以*p
是'S'
, p[1]
是't'
,依此类推。
当分配char *p = "String"
,编译器应拒绝该设置(也许您没有设置足够的诊断级别?)。 如果您告诉编译器无论如何都接受它,那么您将有一个指向(可修改) char
指针,它指向字符串文字。 如果随后尝试通过该指针进行写操作,则不会出现编译器错误,而是可能会在运行时看到两个问题之一:
SIGSEGV
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.