【C语言】_字符数组与常量字符串

发布于:2025-02-10 ⋅ 阅读:(33) ⋅ 点赞:(0)

目录

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博客icon-default.png?t=O83Ahttps://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");
	else
		printf("str1 and str2 are not same\n");

	if (str3 == str4)
		printf("str3 and str4 are same\n");
	else
		printf("str3 and str4 are not same\n");

	return 0;
}

运行结果如下:

程序分析:

易知str1、str2为字符数组,str3、str4为指常量字符串;

调试查看各指针值:

对于变量而言,每一个变量会占用不同的内存空间;

而对于常量,因其不可修改,故而没有必要由于指针变量名不同而在内存中占用不同内存空间,在内存中为其开辟同一块内存即可,令不同的指针变量均指向同一内存区域即可;

注:关于内存栈、堆、静态及代码段:


网站公告

今日签到

点亮在社区的每一天
去签到