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

Day05:C语言数组存储结构与字符串详解

一、数组的存储结构

1. 数组变量的地址连续性

  • 数组中的元素在内存中地址是连续的

  • 数组名非常重要,涉及指针与内存操作。

2. 数组名的含义

  • 数组名表示首元素的地址

  • 示例:

int arr[5]; printf("%p\n", arr); // 输出首元素地址 printf("%p\n", &arr[0]); // 等价

3. 数组名的类型

  • 数组名有类型,但它是地址类型

    • 如果元素是int,数组名类型为int *

    • 如果元素是char,数组名类型为char *

4. 数组名的运算能力

  • 指针运算遵循元素类型大小:

    • int *类型 +1 → 地址增加 4(假设 int 4 字节)

    • char *类型 +1 → 地址增加 1

  • 示例:

int arr[3]; printf("%p\n", arr + 1); // 地址 + sizeof(int)

5. 数组名是否是变量

  • 不是变量

  • 常量值,表示首元素地址

6. 取值运算符

  • *arr→ 取首元素值

  • arr[n]*(arr + n),访问第 n 个元素


二、字符数组与字符串

1. 字符数组

  • 存储char类型变量的数组

  • 可以用于存储字符串,是C语言中唯一可存储字符串的数组类型

2. 字符串(String)

  • 由 0 个或多个字符组成,\0结尾

  • 空串示例:

char empty[] = "";
  • "hello"字符串一定有\0结尾,即"hello\0"


3. 字符串常量与变量

  • 字符串常量:例如"hello",存在程序只读区

  • 字符串变量:在 C 中没有独立类型,只能用字符数组实现


4. 存储字符串的数组示例

char str1[10] = "hello"; // 正确,可作为字符串使用 char str2[2] = {'h', 'i'}; // 不是字符串变量,没有 '\0' char str3[2] = "hi"; // ❌ 越界,"hi" + '\0' 需要 3 个空间

5. 字符串操作

5.1 长度
  • 长度不包含\0字符

  • 示例:

#include <string.h> char str[] = "hello"; printf("%zu\n", strlen(str)); // 输出 5
5.2 复制
#include <string.h> char src[] = "hello"; char dest[10]; strcpy(dest, src);
5.3 拼接
#include <string.h> char str1[20] = "hello"; char str2[] = "world"; strcat(str1, str2); // str1 -> "helloworld"
5.4 比较
  • 依次比较字符 ASCII 值

  • 第一个不同字符决定大小

#include <string.h> printf("%d\n", strcmp("hello", "hi")); // <0,"hello" < "hi" printf("%d\n", strcmp("hello", "hello")); // 0,等于 printf("%d\n", strcmp("hello", "helloa"));// <0,"hello" < "helloa"

🔑 总结

  1. 数组是连续内存存储,数组名是首元素地址的常量

  2. 字符数组是存储字符串的唯一方法

  3. 字符串必须以\0结尾

  4. 字符串操作包括长度、复制、拼接和比较

  5. 字符串比较基于 ASCII 码,长度和内容决定大小

http://www.jsqmd.com/news/642764/

相关文章:

  • AI的实验科学
  • MATLAB箱线图绘制全攻略:从数据导入到高级美化(附常见问题解决)
  • 2026年专业马鞍山二辊矫直辊/马鞍山七辊矫直辊精选推荐公司 - 品牌宣传支持者
  • hyperf 对接企业微信 将消息发送功能改造为异步,使用 HyperF AsyncQueue投递消息任务,失败后自动重试 3 次,超出重试次数后记录
  • 国内半导体盛会哪家好?2026年国内主流展会,助力企业高效参展 - 品牌2026
  • GPEN未来演进方向:从单张修复到视频流实时增强
  • 如何在5分钟内掌握iOS虚拟定位:iFakeLocation开源工具完全指南
  • tiktok最新V2滑块验证分析 /captcha/verifyV2
  • 2.15 sql基础查询(SELECT、FROM、字段别名、常量与表达式)
  • 国内半导体论坛哪家好?精选2026年高端行业论坛,把握产业发展新趋势 - 品牌2026
  • Fish Speech 1.5真实效果:俄语科技文献语音转述准确率实测报告
  • 2026年OpenClaw如何搭建?腾讯云2分钟喂奶级指南+大模型APIKey配置、Skill集成流程
  • 从仿真到实物:永磁同步电机参数辨识的误差分析与实战调优指南(以定子电阻和磁链为例)
  • 国际半导体展会推荐:链接全球资源,优选高规格国际专业展会 - 品牌2026
  • HarmonyOS 6实战::多组件嵌套场景下,自动化测试覆盖复杂交互实践
  • 2026年3月SMT纳米阶梯钢网公司推荐,精密激光切割加工/SMT纳米阶梯钢网,SMT纳米阶梯钢网源头厂家有哪些 - 品牌推荐师
  • 告别传统ChatUI!Nanbeige 4.1-3B Streamlit WebUI真实交互效果分享
  • HY-MT1.5-1.8B实测:轻量级模型如何实现高质量实时翻译?
  • 2026年3月评价好的北村机床源头厂家推荐,加工航空航天复杂结构件/3C 电子壳体高精加工,北村机床厂家怎么选择 - 品牌推荐师
  • 一文讲透数字化转型的十个关键概念:信息化、自动化、数据化、智能化、平台化……
  • 从I2C总线到电平转换:STM32开漏输出的3个实战应用与配置避坑指南
  • 深入大模型-36-learn-claude-code之第十一课Autonomous Agents自治智能体
  • 25美元智能眼镜革命:OpenGlass开源项目如何让普通眼镜拥有AI视觉
  • 程序员副业指南:技术变现全路径从“闻着臭”到“吃着香”,揭秘一碗正宗柳州螺蛳粉的极致体验之旅
  • 免费快速备份QQ空间历史说说的完整解决方案
  • lingbot-depth-pretrain-vitl-14开源部署:镜像内软链机制㊸与双目录防御设计解析
  • 基于 Spring AI 的 RAG(检索增强生成)系统
  • 数据库无法连接情况排查
  • 第5章,[标签 Win32] :GDI 的基本图形
  • Linux设备驱动_概述