网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
深入理解指针操作、动态内存分配与释放是C语言编程中的核心技能。以下内容将进一步详细阐述这些主题,旨在帮助开发者更好地掌握指针的使用以及如何安全、有效地管理程序中的动态内存。
一 深入理解指针操作
A.指针的基本概念
- 指针变量:指针变量是一个存储内存地址的变量。在声明时,需要指定指针的类型,如
int *p;
表示p
是一个指向整型变量的指针。指针变量的值就是它所指向的内存地址。 - 指针的初始化:指针变量在使用前必须被初始化。可以将其初始化为一个已知变量的地址,如
int x = 10; int *p = &x;
,也可以初始化为NULL
表示未指向任何有效对象。 - 指针的解引用:使用
*
运算符可以访问指针所指向的内存位置上的值。如printf("%d", *p);
输出p
所指向的整数。 - 指针的算术运算:对于指向数组或连续内存区域的指针,可以进行加减运算。加法运算使指针向后移动(增加)相应类型的大小个字节;减法运算使指针向前移动(减少)相应类型的大小个字节。例如,对于指向整型数组的指针
int *p = arr;
,p + 1
将指向数组的下一个元素。 - 指针的比较:可以比较两个指针是否指向同一块内存或在内存中是否有相同的顺序。比较运算符包括
<
,<=
,==
,!=
,>=
,>
。
B.指针与数组的关系
- 指针作为数组参数:函数参数传递数组时,实际上是传递数组首元素的地址。因此,形参可以声明为指针类型,如
void process_array(int *arr, size_t size)
。 - 指针与数组下标:指针和数组下标操作在访问数组元素时是等价的。
arr[i]
等价于*(arr + i)
。 - 指针与字符串:C语言中,字符串本质上是一个字符数组,其最后一个元素是空字符
\0
。字符串字面量(如"Hello"
)在编译时会转换为字符数组,并且其地址可以赋给字符指针。使用指针可以遍历字符串,检查其长度,甚至修改内容。
C.指针与函数
- 指针作为函数参数:通过指针,函数可以修改实参的值,实现参数的双向传递。如
void swap(int *a, int *b)
可交换两个整数的值。 - 指针作为函数返回值:函数可以返回一个指针,指向动态分配的内存或静态/全局变量。如
char *strdup(const char *src)
返回一个复制的字符串。 - 指针与函数指针:函数指针存储的是函数的地址,可以赋值、传递和调用。如
int (*compare)(const void *, const void *)
是一个指向比较函数的指针。
二 动态内存分配与释放
A.内存分配函数
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
解视频,并且后续会持续更新**