016. 使用指针访问和修改变量值
在C语言中,指针是一种非常强大的工具,可以用来访问和修改变量的值。指针通过存储变量的内存地址来间接操作变量。以下将通过具体示例展示如何使用指针来访问和修改变量的值。
1. 声明和初始化指针
首先,需要声明一个指针,并将其初始化为某个变量的地址。
示例代码
#include <stdio.h>
int main() {
int num = 10; // 声明一个整数变量
int *ptr = # // 声明一个指针并初始化为num的地址
printf("Value of num: %d\n", num); // 直接访问变量num的值
printf("Address of num: %p\n", &num); // 输出变量num的地址
printf("Value of num via pointer: %d\n", *ptr); // 通过指针访问num的值
printf("Address stored in ptr: %p\n", ptr); // 输出指针ptr中存储的地址
return 0;
}
输出结果
Value of num: 10
Address of num: 0x7ffd5b9a5a44
Value of num via pointer: 10
Address stored in ptr: 0x7ffd5b9a5a44
2. 通过指针修改变量的值
可以通过指针来修改它所指向的变量的值。
示例代码
#include <stdio.h>
int main() {
int num = 10; // 声明一个整数变量
int *ptr = # // 声明一个指针并初始化为num的地址
printf("Original value of num: %d\n", num); // 输出原始值
printf("Original value of num via pointer: %d\n", *ptr); // 通过指针输出原始值
*ptr = 20; // 通过指针修改num的值
printf("Modified value of num: %d\n", num); // 输出修改后的值
printf("Modified value of num via pointer: %d\n", *ptr); // 通过指针输出修改后的值
return 0;
}
输出结果
Original value of num: 10
Original value of num via pointer: 10
Modified value of num: 20
Modified value of num via pointer: 20
3. 指针的指针
指针也可以指向另一个指针。这种情况下,需要使用多个*
来声明和访问。
示例代码
#include <stdio.h>
int main() {
int num = 10; // 声明一个整数变量
int *ptr = # // 声明一个指针并初始化为num的地址
int **ptrPtr = &ptr; // 声明一个指针的指针并初始化为ptr的地址
printf("Original value of num: %d\n", num); // 输出原始值
printf("Original value of num via pointer: %d\n", *ptr); // 通过指针输出原始值
printf("Original value of num via pointer of pointer: %d\n", **ptrPtr); // 通过指针的指针输出原始值
**ptrPtr = 20; // 通过指针的指针修改num的值
printf("Modified value of num: %d\n", num); // 输出修改后的值
printf("Modified value of num via pointer: %d\n", *ptr); // 通过指针输出修改后的值
printf("Modified value of num via pointer of pointer: %d\n", **ptrPtr); // 通过指针的指针输出修改后的值
return 0;
}
输出结果
Original value of num: 10
Original value of num via pointer: 10
Original value of num via pointer of pointer: 10
Modified value of num: 20
Modified value of num via pointer: 20
Modified value of num via pointer of pointer: 20
4. 指针数组
指针数组是一个数组,其中的每个元素都是一个指针。可以通过指针数组访问和修改多个变量的值。
示例代码
#include <stdio.h>
int main() {
int a = 10, b = 20, c = 30;
int *ptrArray[3]; // 声明一个指针数组,包含3个指针
ptrArray[0] = &a; // 将第一个指针初始化为a的地址
ptrArray[1] = &b; // 将第二个指针初始化为b的地址
ptrArray[2] = &c; // 将第三个指针初始化为c的地址
printf("Original value of a: %d\n", *ptrArray[0]); // 通过指针数组访问a的值
printf("Original value of b: %d\n", *ptrArray[1]); // 通过指针数组访问b的值
printf("Original value of c: %d\n", *ptrArray[2]); // 通过指针数组访问c的值
*ptrArray[1] = 25; // 通过指针数组修改b的值
printf("Modified value of a: %d\n", *ptrArray[0]); // 输出修改后的值
printf("Modified value of b: %d\n", *ptrArray[1]); // 输出修改后的值
printf("Modified value of c: %d\n", *ptrArray[2]); // 输出修改后的值
return 0;
}
输出结果
Original value of a: 10
Original value of b: 20
Original value of c: 30
Modified value of a: 10
Modified value of b: 25
Modified value of c: 30
5. 动态分配的指针
可以使用malloc
或calloc
动态分配内存,并通过指针访问和修改动态分配的内存。
示例代码
#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 = 10; // 通过指针初始化动态分配的内存
printf("Original value: %d\n", *ptr); // 输出原始值
*ptr = 20; // 通过指针修改动态分配的内存
printf("Modified value: %d\n", *ptr); // 输出修改后的值
free(ptr); // 释放动态分配的内存
return 0;
}
输出结果
Original value: 10
Modified value: 20
通过上述示例,你可以看到如何使用指针来访问和修改变量的值。关键点包括:
- 声明指针:指定指针所指向的变量类型。
- 初始化指针:可以初始化为某个变量的地址或动态分配的内存地址。
- 访问变量值:通过
*
运算符访问指针所指向的变量的值。 - 修改变量值:通过
*
运算符修改指针所指向的变量的值。 - 指针的指针:可以使用多个
*
来声明和访问。 - 指针数组:可以声明一个数组,其中的每个元素都是一个指针。
- 动态分配的指针:可以使用
malloc
或calloc
动态分配内存,并通过指针访问和修改。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)