98.C语言易混难点:字符数组与字符串指针的底层差异

发布时间:2026/10/1 9:39:08

98.C语言易混难点:字符数组与字符串指针的底层差异 一、两种写法的直观对比我们先看两个最常见的字符串定义char s[] hello; // 字符数组 char *p hello; // 字符串指针从表面上看二者都能通过printf(%s, s)和printf(%s, p)打印出hello但它们的底层存储位置、修改权限完全不同char s[]在栈上分配数组空间字符串内容会被拷贝到数组中可以修改。char *p指针变量保存在栈上指向只读的字符串常量区强行修改会导致程序崩溃。二、字符数组拥有独立存储空间字符数组的本质是在栈上开辟一块连续的内存空间将字符串常量的内容拷贝到这块空间中。因此数组拥有这块内存的所有权可以自由修改其中的字符。示例代码#include stdio.h int main() { char s[] hello; s[0] H; // 可以修改数组中的字符 printf(%s\n, s); // 输出Hello return 0; }底层逻辑栈上分配6字节空间hello\0。字符串常量hello的内容被拷贝到数组中。数组名s是这块内存的首地址修改s[0]会直接修改数组中的内容。三、字符串指针指向只读常量区字符串指针的本质是在栈上分配一个指针变量保存字符串常量的首地址。而字符串常量本身存储在只读的常量区不允许修改。错误示例会导致崩溃#include stdio.h int main() { char *p hello; p[0] H; // 危险修改只读常量区程序会崩溃 printf(%s\n, p); return 0; }底层逻辑栈上分配8字节64位系统的指针变量p。字符串常量hello存储在只读的常量区p保存其首地址。尝试修改p[0]会触发段错误因为常量区的内存是只读的。四、核心差异对比表特性char s[] hellochar *p hello存储位置栈上数组空间栈上指针 常量区字符串所有权数组拥有内容所有权指针仅保存地址无所有权修改权限可以自由修改禁止修改修改会崩溃适用场景需要修改字符串内容仅需读取字符串内容五、正确使用建议1. 需要修改字符串时优先使用字符数组如果后续需要修改字符串内容必须使用字符数组并提前分配足够的空间#include stdio.h #include string.h int main() { // 分配20字节空间足够容纳修改后的字符串 char s[20] hello; s[0] H; strcat(s, C); // 拼接字符串 printf(%s\n, s); // 输出Hello C return 0; }2. 仅需读取字符串时可使用指针如果只是需要读取字符串内容使用指针更节省栈空间#include stdio.h int main() { const char *p hello; // 加const更安全防止误修改 printf(%s\n, p); // 输出hello return 0; }六、一句话总结字符数组和字符串指针的核心差异不在于能否打印字符串而在于谁拥有这块字符空间数组有自己的存储空间内容可以修改指针仅保存常量区的地址内容禁止修改。在实际开发中务必根据需求选择合适的写法避免因混淆二者导致程序崩溃。
延伸阅读

更多相关文章

2026/10/1 9:38:42

智能客服Agent企业级落地:意图识别、多轮对话与业务办理全实现

很多企业上线的第一代智能客服,本质还是“关键词匹配的FAQ机器人”:只能回答固定问题,稍微换个说法就答非所问;想办个业务,翻来覆去就是几句固定话术,最后还是得转人工。用户体验差,人工降本效果有限,上线后很快就沦为摆设。 而Agent化的智能客服,是真正的第二代方案…

2026/9/27 0:37:07

三步云端部署OpenClaw AI助理:腾讯云桌面实战指南

1. 项目概述:当AI助理遇上云桌面 最近在折腾AI工具链的朋友,估计都听说过OpenClaw这个名字。它不是一个单一的软件,而是一个集成了多种开源AI模型和工具链的“瑞士军刀”,能帮你本地部署一个功能相当全面的AI助理。从文本对话、代…

2026/10/1 9:36:42

从ONNX Runtime到TensorRT:GPU推理加速实战指南

我最初接触 ONNX Runtime,是被它的"跨平台神器"名头吸引的。毕竟能在 CPU、GPU 甚至移动端跑同一个模型,省去一堆适配工作,听着确实诱人。后来模型越做越复杂,上线前的性能测试越看越不对劲,GPU 利用率上不去…

2026/10/1 9:36:42

kubectl top失效怎么办?K8s资源监控全链路排查指南

1. 为什么“kubectl top”不是万能钥匙:从一个被反复问爆的运维现场说起上周三凌晨两点,我正盯着屏幕等一个灰度发布完成,手机突然弹出告警:某核心服务 Pod 的 CPU 使用率持续飙到 98%,但kubectl get pods显示状态全是…

2026/10/1 9:36:42

WikiSkill:将智能体经验编译为持久化知识以实现技能演化

WikiSkill:将智能体经验编译为持久化知识以实现技能演化 论文来源:arXiv:2608.27454v1 摘要 智能体技能(Agent skills) 将专业知识与工作流封装成可复用资源,以此拓展AI智能体的能力。现有研究可以从智能体交互经验中自动挖掘技能,让智能体在交互过程中逐步自适应迭代。…

2026/10/1 9:36:42

从零开始AI工程:模型部署、数据漂移与全链路最佳实践

1. 为什么是“从零开始”:AI工程到底在造什么如果你点进这篇文章,大概率和我一样,在某个深夜对着报错的训练脚本发过呆:模型明明在排行榜上跑得很好,为什么一落到自己的业务数据里就各种翻车?这就是我把项目…

2026/10/1 9:36:42

Java Web仓库管理系统实战:Spring Boot+MyBatis并发库存控制

简介:本资源是一套完整的Java Web仓库管理系统毕业设计实现方案,面向计算机专业本科生及课程大作业实践者,聚焦企业级库存管理核心业务场景,涵盖需求分析、系统设计、编码实现与部署验证全流程。压缩包体积59.99MB,包含…

2026/10/1 9:31:42

一键Office安装激活:LKY_OfficeTools

一键Office安装激活:LKY_OfficeTools 【免费下载链接】LKY_OfficeTools 一键自动化 下载、安装、激活 Office 的利器。 项目地址: https://gitcode.com/GitHub_Trending/lk/LKY_OfficeTools LKY_OfficeTools 是一个开源 Windows 工具,可一键自动下…

2026/10/1 5:21:14

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/29 21:48:03

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑