有人能解释一下为什么指针能起作用吗

char * str1;

str1 = "Hello1";

str1 = "new string";

// but not this
char str2 [] = "hello";
str2 = "four";

// or this
char str3 [];
str3 = "hello";
str3 = "hello";

推荐答案

Why it works with pointers:
当您在C中说char * str1时,您是在内存中分配一个指针.当您编写str1 = "Hello";时,您在内存中创建了一个字符串文字,并使指针指向它.当您创建另一个字符串文字"new string"并将其赋给str1时,您所做的就是更改指针指向的位置.

Why it doesn't work with arrays:

str3的情况下,情况也是如此.您尚未在定义中定义数组的大小,因此它将其大小计算为0.在不调整数组大小的情况下,无法分配任何新内容.

C++相关问答推荐

新的memaligning函数有什么用?

如何确保内存分配在地址附近?

自定义malloc实现上奇怪的操作系统依赖行为

为什么海湾合作委员会在共享对象中的. init_data的虚拟内存地址之前留出一个空白

为什么getchar()挂起了,尽管poll()返回了一个好的值?""

sizeof结果是否依赖于字符串的声明?

标准的C17标准是用括号将参数包装在函数声明中吗

C:scanf(%d&q;,...)输入只有一个减号

为什么net/if.h在ifaddrs.h之前?

fwrite无法写入满(非常大)缓冲区

字符是否必须转换为无符号字符,然后才能与getc家族的返回值进行比较?

为什么cudaFree不需要数据 struct 的地址?

For循环中的变量行为不符合预期.[C17]

如何组合两个宏来初始化C语言中的字符串数组?

是否有单独的缓冲区用于读写库调用?

使用mmap为N整数分配内存

使用 strtok 多次分割一个字符串会导致意外行为

函数的typedef是标准 C 语法吗?它与函数指针的typedef有何不同?

clion.我无法理解 Clion 中发生的 scanf 错误

多行表达式:C 编译器如何处理换行符?