目录
C语言指针详解:用法与实例
引言
1. 指针基础
1.1 什么是指针?
1.2 如何声明指针?
1.3 获取变量的地址
1.4 解引用指针
2. 指针的高级用法
2.1 指针和数组
2.2 指针和函数参数
2.3 指针和动态内存分配
3. 指针的注意事项
3.1 空指针
3.2 悬空指针
3.3 指针运算
C语言指针详解:用法与实例
引言
- 指针是C语言中一个非常强大但又容易让人困惑的概念。
- 正确理解和使用指针可以极大地提高程序的效率和灵活性。
- 本文将详细介绍C语言中指针的基本概念、用法以及一些实用的例子。
1. 指针基础
1.1 什么是指针?
- 指针是一个变量,它的值是另一个变量的地址。
- 指针变量的类型必须与它指向的变量类型一致。
1.2 如何声明指针?
int *ptr; // ptr 是一个指向 int 类型的指针
char *p; // p 是一个指向 char 类型的指针
float *f; // f 是一个指向 float 类型的指针
1.3 获取变量的地址
- 使用
&
运算符可以获取变量的地址。
int num = 10;
int *ptr = # // ptr 存储 num 的地址
1.4 解引用指针
- 使用
*
运算符可以解引用指针,访问指针所指向的变量的值。
int num = 10;
int *ptr = #
printf("Value of num: %d\n", *ptr); // 输出 10
2. 指针的高级用法
2.1 指针和数组
- 数组名本身就是一个指向数组第一个元素的指针。
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 或者 int *ptr = &arr[0];
for (int i = 0; i < 5; i++) {printf("%d ", *(ptr + i)); // 输出 1 2 3 4 5
}
2.2 指针和函数参数
- 指针可以用来传递变量的地址,从而在函数中修改变量的值。
void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}int main() {int x = 10, y = 20;swap(&x, &y);printf("x = %d, y = %d\n", x, y); // 输出 x = 20, y = 10return 0;
}
2.3 指针和动态内存分配
- 使用
malloc
和free
函数可以动态分配和释放内存。
#include <stdio.h>
#include <stdlib.h>int main() {int *ptr = (int *)malloc(sizeof(int));if (ptr == NULL) {printf("Memory allocation failed\n");return 1;}*ptr = 100;printf("Value at allocated memory: %d\n", *ptr);free(ptr); // 释放内存return 0;
}
3. 指针的注意事项
3.1 空指针
- 指针在使用前应该初始化,避免使用未初始化的指针。
int *ptr = NULL;
if (ptr != NULL) {printf("Pointer is not null\n");
} else {printf("Pointer is null\n"); // 输出 Pointer is null
}
3.2 悬空指针
- 指针指向的内存被释放后,指针变成悬空指针,不应该再使用。
int *ptr = (int *)malloc(sizeof(int));
*ptr = 100;
free(ptr);
// ptr 现在是悬空指针,不应该再使用
3.3 指针运算
- 指针可以进行加减运算,但需要注意边界条件。
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
ptr++; // ptr 现在指向 arr[1]
printf("Value at arr[1]: %d\n", *ptr); // 输出 2