目录
1. 常量字符串的不可变性
2. 关于常量字符串的打印
3. 关于字符数组与常量字符串的内存分布
1. 常量字符串的不可变性
char arr[10] = "abcdef";// 字符数组char* p2 = arr;char* p3 = "abcdef"; // 常量字符串
尝试对常量字符串进行修改,调试执行至修改语句时,异常如下:
由于常量字符串的内容不可变性,可使用const对其进行修饰:
char arr[10] = "abcdef";// 字符数组char* p2 = arr;const char* p3 = "abcdef"; // 常量字符串
注:const在*左,修饰*p3,表示指针变量p3指向的内容不可变,即该常量字符串不可变;
关于const修饰指针变量内容可参下文,链接如下:
【C语言】_const修饰指针变量-CSDN博客https://blog.csdn.net/m0_63299495/article/details/144909666
2. 关于常量字符串的打印
由代码定义可知,可用指针变量定义常量字符串,指向其起始地址:
同样,给定常量字符串起始地址,使用%s即可实现打印:
#include<stdio.h>
int main() {char arr[10] = "abcdef";// 字符数组char* p2 = arr;printf("%s\n", p2);char* p3 = "abcdef"; // 常量字符串printf("%s\n", p3);return 0;
}
运行结果如下:
3. 关于字符数组与常量字符串的内存分布
#include <stdio.h>
int main()
{char str1[] = "hello bit.";char str2[] = "hello bit.";const char* str3 = "hello bit.";const char* str4 = "hello bit.";if (str1 == str2)printf("str1 and str2 are same\n");elseprintf("str1 and str2 are not same\n");if (str3 == str4)printf("str3 and str4 are same\n");elseprintf("str3 and str4 are not same\n");return 0;
}
运行结果如下:
程序分析:
易知str1、str2为字符数组,str3、str4为指常量字符串;
调试查看各指针值:
对于变量而言,每一个变量会占用不同的内存空间;
而对于常量,因其不可修改,故而没有必要由于指针变量名不同而在内存中占用不同内存空间,在内存中为其开辟同一块内存即可,令不同的指针变量均指向同一内存区域即可;
注:关于内存栈、堆、静态及代码段: