C指针详解:从基础到高级

需积分: 9 5 下载量 162 浏览量 更新于2024-08-29 收藏 125KB PDF 举报
"明明白白C指针.pdf" 在C语言中,指针是编程中一个非常重要的概念,它允许我们存储变量的地址并直接操作内存。以下是对C指针的详细解释: 1. 指针声明: - `(1) int* ptr;` 这声明了一个指向整型(int)的指针,`ptr` 是指针变量的名字,它存储的是整型变量的地址。 - `(2) char* ptr;` 声明了一个指向字符型(char)的指针,可以用来指向单个字符或字符串的首字符。 - `(3) int** ptr;` 这是一个二级指针,它指向一个指针,这个指针本身又指向一个整型变量。 - `(4) int(*ptr)[3];` 这声明了`ptr`是一个指针,它指向一个包含三个整数的数组。 - `(5) int*(*ptr)[4];` 这是一个更复杂的情况,`ptr`是一个指针,它指向一个数组,这个数组含有四个指向整数的指针。 2. 指针类型和解引用: - `int* ptr;` 当你通过`*ptr`来访问指针时,你实际上是在访问它所指向的那个整数。 - `char* ptr;` 类似地,对于字符指针,`*ptr`会给出它所指向的字符。 - 对于二级指针`int** ptr;`,`**ptr`会给你提供`ptr`指向的那个指针所指向的整数。 - 数组指针如`int(*ptr)[3];`,`*ptr`将返回一个包含三个整数的数组的首元素,而`ptr[i]`则会访问第`i`个这样的数组。 3. 指针操作: - 分配内存:在C语言中,可以使用`malloc()`或`calloc()`函数为指针分配内存,例如`ptr = (int*) malloc(sizeof(int) * 5);`。 - 释放内存:使用`free(ptr)`来释放之前分配的内存。 - 指针运算:`++ptr`或`ptr++`会将指针向前移动到下一个内存单元。如果指针指向数组,`ptr + i`会指向数组的第`i`个元素。 4. 指针与数组的关系: - 在C语言中,数组名在大多数情况下可以被视为指向其首元素的指针。例如,`int arr[5];`可以被看作`int* arr;`。 - 但数组名和指针有一个关键区别:数组名是一个常量,不能被赋值,而指针可以改变其指向。 5. 函数参数中的指针: - 在函数参数列表中使用指针,可以传递变量的地址,从而在函数内部修改原始变量的值。 - 例如,`void modify(int* num) { *num = 10; }`,调用`modify(&myInt)`会改变`myInt`的值。 6. 多级指针在函数调用中的应用: - 多级指针可以用于传递结构复杂的对象,例如二维数组或嵌套结构体的地址。 7. 指针安全: - 使用未初始化的指针可能导致程序崩溃或难以预测的行为,因此始终确保在使用前正确初始化指针。 - 避免空指针解引用(`*NULL`),在访问指针之前检查是否为空。 - 确保正确释放内存,避免内存泄漏。 以上就是关于C指针的一些基本知识,理解并熟练掌握指针是成为C语言专家的关键步骤之一。