C/C++ char类型字符串直接赋值与分配内存赋值的区别
1、直接赋值
char* direct_assign = "Hello World!";
std::cout << "直接赋值: " << direct_assign << std::endl;指针 str 直接指向存储在只读内存区(常量区)的字符串字面值,其对应的字符串为常量,无法修改字符串的值;
2、分配堆内存后赋值
#include <cstring>
#include <cstdlib>char* heap_alloc = (char*)malloc(20 * sizeof(char));
strcpy(heap_alloc, "Hello World!");
std::cout << "堆分配: " << heap_alloc << std::endl;使用malloc或者new申请的内存为堆内存,可以直接修改串的值,如:
// 允许修改堆分配的内容
heap_alloc[0] = 'h';
heap_alloc[6] = 'w';
std::cout << "修改后堆分配: " << heap_alloc << std::endl;堆内存使用过后需要手动释放内存
free(heap_alloc);3、分配栈内存后赋值
char stack_array[20] = "Hello World!";
std::cout << "栈数组: " << stack_array << std::endl;栈上分配内存不用显式的内存申请,且可以直接修改串的值,如:
// 允许修改堆分配的内容
stack_array[0] = 'h';
stack_array[6] = 'w';
std::cout << "修改后栈内存分配: " << stack_array << std::endl;