C语言中的指针
指针是C语言中一个强大的特性,它存储了变量的内存地址。通过指针,程序可以直接访问和操作内存,这为程序提供了极大的灵活性。
指针的概念和使用
指针的定义
指针是一个变量,其值为另一个变量的地址。任何变量的地址都可以被存储在指针中。
int var = 10;
int *ptr = &var; // ptr是一个指向int类型的指针,它存储了var的地址
指针的解引用
通过解引用操作符*
,可以访问指针指向的变量的值。
int value = *ptr; // value现在是10,等同于var的值
指针的算术
指针支持加法和减法运算,步长取决于指针指向的数据类型。
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
p++; // p现在指向arr[1]
指针与数组的关系
数组名在大多数情况下可以被看作指向数组第一个元素的指针。
int arr[5] = {1, 2, 3, 4, 5};
int (*arrPtr)[5] = &arr; // arrPtr是一个指向含有5个int的数组的指针
通过指针访问数组元素:
int value = arr[0]; // 通过数组名访问
int valuePtr = *arr; // 通过指针访问,等同于arr[0]
指针作为函数参数
指针作为函数参数时,可以传递大量数据,或者在函数内部修改调用者的数据。
值传递与指针传递
- 值传递:传递变量的副本,修改不会影响到原始变量。
- 指针传递:传递变量的地址,可以通过解引用修改原始变量。
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
swap(&x, &y);
// x和y的值将被交换
return 0;
}
代码示例说明
以下是一些具体的代码示例,展示指针的概念、使用以及与数组的关系和作为函数参数的用法。
#include <stdio.h>
// 函数声明
void printValue(int *ptr);
void swap(int *a, int *b);
int main() {
int var = 100;
int *ptr = &var; // 指针ptr指向var
printf("Value of var: %d\n", var);
printf("Value accessed via pointer: %d\n", *ptr);
// 指针作为函数参数
printValue(ptr);
int x = 10, y = 20;
printf("Before swap: x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("After swap: x = %d, y = %d\n", x, y);
return 0;
}
// 函数定义
void printValue(int *ptr) {
printf("Value passed to function: %d\n", *ptr);
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
以上代码展示了如何定义和使用指针,包括指针与变量的关联、指针的解引用、以及如何将指针作为函数参数来交换两个变量的值。这些示例可以帮助理解指针的工作原理和实际应用。在实际编程中,可以根据具体需求使用指针来访问和操作内存,实现更高效的数据处理。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)