有人能解释一下这些代码行之间的区别吗

char *p = "String";
char p2[] = "String";
char p3[7] = "String";

在什么情况下,我应该使用上述每一项?

推荐答案

This link美元应该能满足你的好奇心.

基本上(忘记第三个不好的例子),1和2之间的区别在于1为指向数组的指针分配空间.

但在代码中,您仍然可以将它们作为指针进行操作——唯一的一点是,您无法重新分配第二个指针.

C++相关问答推荐

在C中,entry = fgets(entry,sizeof(entry),*pt)是否是错误?

如何将匿名VLA分配给指针?

我可以动态分配具有空类型函数的矩阵吗?

为什么PLT表中没有push指令?

Mbed TLS:OAEP的就地en—/decryption似乎不起作用'

如何将不同长度的位转换成字节数组?

在函数中使用复合文字来初始化C语言中的变量

如何在C中从函数返回指向数组的指针?

警告:C++中数组下标的类型为‘char’[-Wchar-subpts]

为静态库做准备中的奇怪行为

`#if`条件中是否允许`sizeof`?

N的值设置为0或1(未定义的行为),而我正在try 学习realloc和Malloc的用法

整型文字后缀在左移中的用途

等同于铁 rust 的纯C语言S未实现!()宏

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

当内存来自Malloc时,将char*转换为另一个指针类型是否违反了严格的别名规则?

';\n&39;和';\r&39;中的';\n&39;之间有什么关系?

通过k&;r语法的c声明无效

如何使crc32的结果与cksum匹配?

macos/arm64 上地址空间不使用第一位吗?