有什么区别:
char * const
Run Code Online (Sandbox Code Playgroud)
和
const char *
Run Code Online (Sandbox Code Playgroud) 正如标题所说,有什么区别
char a[] = ?string?; and
char *p = ?string?;
Run Code Online (Sandbox Code Playgroud)
这个问题在接受我采访时被问到了.我甚至不理解这个说法.
char a[] = ?string?
Run Code Online (Sandbox Code Playgroud)
什么是?运营商?它是字符串的一部分还是具有某些特定含义?
我有一个简单的程序:
int main() {
char *c = "message";
char *z = "message";
if ( c == z )
printf("Equal!\n");
else
printf("Not equal!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么这个打印Equal!,即使在关闭优化的情况下进行编译(-O0).这将表明,这两个c和z指向相同的内存区域,并因此在第一突变z(例如,改变z[0]到a)将是昂贵的(需要复制和写入).
我对正在发生的事情的理解是我没有声明一个类型数组char,而是创建一个指向a的第一个字符的指针string literal.因此,c并且z都存储在数据段中,而不是存储在堆栈中(并且因为它们都指向相同的字符串文字,所以c == z是真的).
这与写作不同:
char c[] = "message";
char z[] = "message";
if ( c == z ) printf("Equal\n");
else printf("Not equal!\n");
Run Code Online (Sandbox Code Playgroud)
其打印Not equal! …
虽然我使用C++,但作为一项要求,我需要使用const char*数组而不是字符串或char数组.由于我是新手,我需要学习如何使用const char*.我已经将我的const char*数组声明为const char* str[5].在程序的稍后阶段,我需要使用值填充5个元素中的每个元素.
但是,如果我尝试分配这样的值:
const char* str[5];
char value[5];
value[0] = "hello";
str[0] = value[0];
Run Code Online (Sandbox Code Playgroud)
它不会编译.将char数组添加到char到const char*数组然后打印数组的正确方法是什么?任何帮助,将不胜感激.谢谢.