指针的基本概念
指针是C语言中一种特殊的变量,用于存储内存地址。通过指针可以直接访问或操作内存中的数据,提高程序的灵活性和效率。
声明指针
指针的声明需要指定所指向变量的数据类型,语法如下:
int *ptr; // 指向整型变量的指针
char *c_ptr; // 指向字符型变量的指针
指针的初始化与赋值
指针必须指向有效的内存地址后才能使用,否则会导致未定义行为。
int num = 10;
int *ptr = # // ptr指向num的地址
指针的操作
取地址与解引用
&运算符用于获取变量的地址。*运算符用于访问指针所指向的值。
int a = 5;
int *p = &a;
printf("%d", *p); // 输出5(解引用)
指针的算术运算
指针支持加减运算,移动的单位与其指向的数据类型大小相关。
int arr[3] = {1, 2, 3};
int *p = arr;
p++; // 指向arr[1]
指针与数组
数组名本质上是首元素的地址,指针可以用于遍历数组。
int arr[3] = {10, 20, 30};
int *p = arr;
for (int i = 0; i < 3; i++) {
printf("%d ", *(p + i)); // 输出10 20 30
}
指针与函数
指针作为函数参数
通过指针可以实现函数内修改外部变量的值(按引用传递)。
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
函数返回指针
函数可以返回指针,但需确保指向的内存未被释放。
int* getPointer(int *x) {
return x;
}
动态内存分配
使用 malloc、calloc、realloc 和 free 动态管理内存。
int *ptr = (int*)malloc(5 * sizeof(int)); // 分配5个整型空间
if (ptr != NULL) {
free(ptr); // 释放内存
}
指针的高级用法
指针数组与数组指针
- 指针数组:存储指针的数组。
- 数组指针:指向数组的指针。
int *ptr_arr[3]; // 指针数组
int (*arr_ptr)[3]; // 数组指针
多级指针
指向指针的指针,用于处理多层间接访问。
int a = 10;
int *p = &a;
int **pp = &p; // 二级指针
注意事项
- 避免野指针(未初始化的指针)。
- 防止内存泄漏(动态分配后未释放)。
- 确保指针类型匹配,避免类型不兼容的错误。
2341

被折叠的 条评论
为什么被折叠?



