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

C语言学习笔记(一)从指针出发,打通数组与字符串

大家好,这是我的 CSDN 第二篇博客。
上一篇主要是简单自我介绍,记录一下自己的学习路线。从这一篇开始,我想慢慢整理 C 语言里的核心知识点,方便自己复习,也希望能帮到同样在学习的同学。

说到 C 语言,很多人第一个头大的知识点就是指针。但其实指针并没有那么可怕,而且数组、字符串这两个高频考点,本质上都和指针紧紧绑在一起。
今天这篇文章,我就从指针基础开始,一步步延伸到数组,再到字符串,把这三块内容串成一个整体。



一、先搞懂最基础的指针

指针可以说是 C 语言的灵魂,也是很多初学者的第一道坎。我们先把最核心的概念说清楚。

1. 指针是什么?

一句话:
指针变量,是用来存放「内存地址」的变量。

普通变量存的是数值,指针变量存的是“某个变量在内存里的门牌号”。

2. 两个最关键的符号

- & :取地址符,拿到变量的地址
- * :解引用符,通过地址找到原来的变量

3. 最简单的指针示例

c

#include <stdio.h>

int main() {
int a = 10;
int *p = &a; // p 存放 a 的地址

printf("a = %d\n", a);
printf("通过指针访问 a = %d\n", *p);

*p = 20; // 通过指针修改 a
printf("修改后 a = %d\n", a);

return 0;
}


通过这段代码可以明白:
操作 *p ,本质上就是在操作变量 a 。



二、从指针,自然过渡到数组

理解指针之后,再看数组,你会发现数组就是指针的一种“固定用法”。

1. 数组名是什么?

在 C 语言里:
数组名 ≈ 指向数组首元素的常量指针

比如:


int arr[5] = {1,2,3,4,5};


这里的 arr 本身就代表 &arr[0] ,也就是数组第一个元素的地址。

2. 下标写法与指针写法完全等价

下面这两种写法,在编译器眼里是一模一样的:

- arr[i]
- *(arr + i)

也就是说:
数组下标,本质就是指针偏移。

3. 用指针遍历数组

c

#include <stdio.h>

int main() {
int arr[5] = {10, 20, 30, 40, 50};
int *p = arr;

for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, *(p + i));
}

return 0;
}


看到这里应该能感觉到:
数组和指针根本不是两个孤立的知识点,它们底层是同一套逻辑。



三、再延伸:字符串就是特殊的字符数组

数组懂了,字符串就更简单了。

1. 字符串的本质

C 语言里没有专门的“字符串类型”,字符串其实就是:
以 \0 结尾的字符数组。

2. 两种表示字符串的方式

① 字符数组形式


char str1[] = "hello";


本质是数组,内容可以修改。

② 字符指针形式


char *str2 = "world";


本质是指针,指向常量字符串,一般不建议修改。

3. 用指针遍历字符串


#include <stdio.h>

int main() {
char *str = "hello, c language";

while (*str != '\0') {
printf("%c ", *str);
str++;
}

return 0;
}


这里 str 不断往后移动,逐个输出字符,直到遇到结束符 \0 停止。
这也是很多 C 语言面试里很基础的手写题。



四、总结三者关系

为了方便记忆,我自己总结了一句话:

- 指针是基础:负责地址与访问
- 数组是连续内存 + 指针偏移
- 字符串是带 \0 结束符的字符数组 / 字符指针

可以说:
不理解指针,就学不明白数组和字符串;
理解了指针,后面这两块一通百通。



五、小结与后续计划

这篇主要是把指针 → 数组 → 字符串这条主线梳理了一遍,没有讲特别偏、特别难的内容,重在打基础、理关系。

后面我计划继续写:

- 指针进阶(指针数组、数组指针、函数指针)
- 动态内存分配(malloc、free)
- 结构体与指针结合使用

如果你也在学习 C 语言,欢迎一起交流,哪里写得不对或者不清晰的地方,也欢迎指出,共同进步~

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

相关文章:

  • Nano-Banana效果展示:多款产品高清拆解图生成作品集
  • YOLOv9官方镜像深度体验:开箱即用,效果超出预期
  • 《与AI的妄想对话:如何给机器人造灵魂?》
  • 【数据库 面试突击 · 01】大厂高频面试题:从SQL执行原理到 InnoDB 全解析
  • 2026川酒贴牌代加工优质厂家推荐榜:散酒贴牌/散酒连锁加盟/泸州酒贴牌代加工/浓香白酒贴牌/清香白酒贴牌/白酒 OEM 贴牌/选择指南 - 优质品牌商家
  • Xshell隧道实战:5分钟搞定内网机器与数据库直连(附常见错误排查)
  • SNOMED CT入门指南:从概念、关系到数据文件,手把手带你理解这个医学术语标准
  • Windows下纯Python解析激光雷达pcap数据包:无需ROS和PCL的极简方案
  • 2026成都专业市场调查机构推荐榜:成都消费者市场调查公司、成都的市场调查公司排名、第三方市场调查公司推荐、第三方市场调查机构推荐选择指南 - 优质品牌商家
  • Z-Image-Turbo_Sugar脸部Lora技术栈解读:从AI模型到Web应用的全链路技术
  • Qwen3-TTS-Tokenizer-12Hz一文详解:Qwen3-TTS系列架构中的定位
  • Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成
  • VideoAgentTrek-ScreenFilter极限压力测试:应对高并发视频流请求的稳定性表现
  • AUTOSAR CANTP:ISO 15765协议如何重塑车载诊断数据传输
  • ANSYS接触分析实战:从法兰连接案例看MPC绑定与标准接触设置技巧
  • Qwen-Image-Edit快速入门:上传模糊图片,一键生成高清人像
  • 5分钟掌握全平台资源下载神器:res-downloader终极配置与实战指南
  • 2026成都小规模代理记账公司评测报告:成都个体户注册公司、成都代理记账价格、成都代理记账报税、成都代理记账收费标准选择指南 - 优质品牌商家
  • CPU内部总线架构解析:数据通路设计与性能优化
  • 开源!比claude和codex的CLI更好用10倍的工具
  • Spring Boot集成AI推理服务全链路实践,从模型加载、线程池隔离到GPU资源抢占应对策略
  • OpenCV插值方法实战指南:从原理到性能优化
  • Xinference-v1.17.1在医疗领域的创新应用:智能预约系统开发
  • 实战指南:利用Python可视化常见激活函数(Sigmoid、Tanh、ReLU、PReLU)及其特性对比
  • 周报(彭则豪)
  • LoRA训练避坑指南:lora-scripts常见错误与解决方法汇总
  • STM32F103C8T6开发板上的LiuJuan20260223Zimage轻量化部署
  • Vitis HLS避坑指南:hls::stream深度设置不当,你的FPGA设计可能卡死
  • HY-Motion 1.0基础教程:30词内英文Prompt编写技巧与常见错误
  • MogFace模型Python入门实战:调用API完成第一个人脸检测程序