当前位置: 首页 > article >正文

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

目录

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为指常量字符串;

调试查看各指针值:

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

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

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


http://www.kler.cn/a/473154.html

相关文章:

  • Python中的可变对象与不可变对象;Python中的六大标准数据类型哪些属于可变对象,哪些属于不可变对象
  • 【马来西亚理工大学主办,ACM出版】2025年大数据、通信技术与计算机应用国际学术会议(BDCTA 2025)
  • uniapp获取安卓与ios的唯一标识
  • SpringBoot日常:集成Kafka
  • 反规范化带来的数据不一致问题的解决方案
  • 江科大STM32入门——IIC通信笔记总结
  • 测试开发基础知识2
  • java内存区域 - 栈
  • 如何用Python编程实现自动整理XML发票文件
  • 从零开始:构建一个简单的聊天应用使用 WebSocket 和 React Native
  • Clojure语言的学习路线
  • Erlang语言的函数实现
  • 国内大带宽服务器的应用场景
  • DeepSeek-V3 通俗详解:从诞生到优势,以及与 GPT-4o 的对比
  • 前端VUE首次加载错误类型
  • CSS——24.实战技能网导航栏 hove状态
  • docker搭建atlassian-confluence:7.2.0
  • MySQL学习笔记(二)
  • element-ui中多个表单el-form进行显示/隐藏切换时表单部分校验失效的解决办法
  • 服务器漏洞修复解决方案
  • Chapter 4.5:Connecting attention and linear layers in a transformer block
  • 【VUE 指令学习笔记】
  • Linux/Ubuntu/银河麒麟 arm64 飞腾FT2000 下使用 arm64版本 linuxdeployqt 打包Qt程序
  • MySQL进阶突击系列(05)突击MVCC核心原理 | 左右护法ReadView视图和undoLog版本链强强联合
  • 红黑树详解
  • 极客公园创新大会探索AI未来,Soul App创始人张璐团队以技术驱动创新