常量字符串和 变量字符串
常量字符串和变量字符串是在编程中常见的两种字符串类型,它们有以下区别:
- 值的不可变性:常量字符串的值是不可变的,一旦被定义,就不能修改。而变量字符串的值是可变的,可以随时修改。
常量字符串1:
const char* constantString = "Hello, World!";
在上述代码中,“Hello, World!” 是一个常量字符串,其值不可修改。
变量字符串1:
char variableString[] = "Hello, World!";
在上述代码中,variableString 是一个变量字符串,其值可以修改。
存储方式:常量字符串通常存储在只读内存区域,而变量字符串通常存储在可读写的内存区域。
常量字符串2:
const char* constantString = "Hello, World!";
在上述代码中,“Hello, World!” 是一个常量字符串,它通常存储在只读内存区域。
变量字符串2:
char variableString[] = "Hello, World!";
在上述代码中,variableString 是一个变量字符串,它通常存储在可读写的内存区域。
内存分配方式:常量字符串通常在编译时就被分配内存空间,而变量字符串通常在运行时动态分配内存空间。
常量字符串3:
const char* constantString = "Hello, World!";
在上述代码中,“Hello, World!” 是一个常量字符串,它在编译时就被分配了内存空间。
变量字符串3:
char variableString[] = "Hello, World!";
在上述代码中,variableString 是一个变量字符串,它在运行时动态分配了内存空间。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
常量字符串和 变量字符串地址对比
首先 很显然是不相同的
这里开始做出解释
不想相同的根本原因是
在str1和str2里面 是开辟两个空间
但是在3 4 里面是指针指向的一个空间 就算后期修改 也是在一个空间进行修改
这里解释一下 就是 因为字符串的内容是一样的
也就是说
在C语言中,字符串通常是由字符数组实现的,即一串连续的字符。当你有两个字符串指针,它们指向的内容是一样的,这意味着它们都指向了存储相同字符序列的内存地址。然而,这并不意味着两个指针指向的空间是一样的。
在这个例子中,str3和str4指向的内容是一样的,因为它们都指向了同一个字符串字面量"hello"。但是,str1和str2本身是两个不同的指针变量,它们在内存中占据不同的位置。当你打印它们的地址时,你会发现它们是不同的。
指针的值是内存地址,而指针指向的内容是存储在那个地址中的值。即使两个指针指向的内容相同,它们指向的空间(即指针变量的内存地址)也是不同的。这是指针和引用之间的一个重要区别:在C++中,引用是与目标数据同生的别名,所以如果两个引用指向同一个对象,它们引用的实际上是同一个内存位置。但在C语言中,指针只是指向内存地址的变量,它们可以被赋予相同的值,但它们本身是独立的。
这两不是同一个首元素地址
因为开辟的不是一个空间