C语言进阶知识点总结:指针与内存管理

十年开发一朝灵 2024-07-08 21:32:54

指针的基本概念

指针是C语言的核心特性之一,它存储的是另一个变量的地址。通过指针,我们可以直接访问和修改变量的值,也可以实现动态内存分配。

int var = 5;int *ptr = &var;printf("Value of var: %d\n", *ptr); // 输出:Value of var: 5指针的运算

指针可以进行自增(++)和自减(--)运算,指向下一个或上一个地址。指针间的减法可以用来计算两个地址之间的距离。

int arr[3] = {10, 20, 30};int *ptr1 = &arr[0];int *ptr2 = &arr[2];printf("Distance between ptr1 and ptr2: %ld\n", ptr2 - ptr1); // 输出:Distance between ptr1 and ptr2: 2指针与数组

数组名是一个指向数组首元素的指针。通过指针访问数组元素时,可以使用指针的算术运算。

int arr[3] = {10, 20, 30};int *ptr = arr; // 数组名作为指针for (int i = 0; i < 3; i++) { printf("Array element %d: %d\n", i, *(ptr + i));}多级指针

指针的指针,即指向指针的指针,可以用来访问和修改变量的地址。

int var = 5;int *ptr1 = &var;int **ptr2 = &ptr1;printf("Value of var via multi-level pointer: %d\n", **ptr2); // 输出:Value of var via multi-level pointer: 5函数指针

函数指针指向函数的代码,可以通过函数指针调用函数。

void printHello() { printf("Hello, world!\n");}int main() { void (*funcPtr)() = printHello; funcPtr(); // 调用函数 return 0;}动态内存分配

C语言提供了malloc()、calloc()、realloc()和free()函数来动态管理内存。动态内存分配允许在程序运行时根据需要分配和释放内存。

int *dynamicArray = (int*)malloc(3 * sizeof(int));dynamicArray[0] = 10;dynamicArray[1] = 20;dynamicArray[2] = 30;free(dynamicArray); // 释放内存野指针和空指针

未初始化的指针可能导致程序行为不可预测,称为野指针。空指针是一个特殊的指针值,表示没有指向任何地址。

int *ptr; // 未初始化的指针,可能是野指针ptr = NULL; // 空指针,安全内存泄露

动态分配的内存如果没有被正确释放,会导致内存泄露。使用free()函数及时释放不再使用的动态内存。

int *ptr = (int*)malloc(sizeof(int));*ptr = 10;free(ptr); // 避免内存泄露总结:

C语言的指针和内存管理是进阶必备的技能,理解指针的概念和运算,能够高效地操作数组和函数,掌握动态内存分配和释放,避免野指针和内存泄露的问题,是编写高效、稳定C程序的关键。

0 阅读:1

十年开发一朝灵

简介:感谢大家的关注