为什么这两个数组初始化之间存在差异?
char *message = "HELLO";
if(message[0] == 'H'){
// true
}
好的,这很有效。但这不是:
char message[6] = "HELLO";
if(message[0] == 'H'){
// false
}
他们不是在表达同样的事情吗?
答案 0 :(得分:0)
"HELLO"
的类型为const char *
。但由于历史原因,这可以被视为char *。
char messagd[6]
是堆栈中的字符数组。一个不同的野兽。
您需要使用strcpy
来填充该数组
答案 1 :(得分:0)
在第一个代码片段中,message
是指向只读字符数组的指针。你可以修改指针(例如++message
没问题),但你不能修改它指向的内容(message[0] = 'X'
调用未定义的行为)。
在第二个代码片段中,message
是带有初始化器的字符数组。您无法修改变量(++message
无效),但您可以修改数组的内容(message[0] = 'X'
很好)。
同样sizeof(message)
可能会有所不同。
当您只是访问message[0]
时,它们的行为相似;也就是说,要么你的声明行为错了,要么编译器有一个非常令人惊讶的错误。
但它们是不同的东西,并且在几个方面表现不同,其中一些我刚才列举过。