1、解引用指针
指针是一个存储内存地址的变量,解引用指针意味着通过指针访问存储在该地址的值。例如,给定一个指向整数的指针,解引用指针就可以访问该整数的值。
#include <iostream>
using namespace std;
int main() {
int a = 10; // 定义一个整数变量 a
int *ptr = &a; // 定义一个指针 ptr,指向变量 a 的地址
// 输出指针 ptr 指向的值,即 a 的值
// 解引用指针 ptr,输出 a 的值
cout << "Value of a: " << *ptr << endl;
// 修改指针 ptr 指向的值,即修改 a 的值
*ptr = 20; // 解引用 ptr,并将其指向的值(a)修改为 20
cout << "New value of a: " << a << endl; // 输出修改后的 a 的值
return 0;
}
2、解引用指针的方法
在 C 和 C++ 中,解引用指针使用星号(*
)操作符。这个操作符会获取指针所指向地址的值。
#include <iostream>
using namespace std;
int main() {
int num = 10;
int *ptr = # // ptr 是指向 num 的指针
cout << "num 的值: " << num << endl; // 输出 10
cout << "ptr 指向的值: " << *ptr << endl; // 解引用 ptr,输出 10
*ptr = 20; // 修改 ptr 指向的值
cout << "修改后的 num 的值: " << num << endl; // 输出 20
return 0;
}
3、解引用指针的原因
解引用指针的主要目的是访问指针所指向的数据。指针提供了一种间接访问数据的方式。在某些情况下,我们可能没有直接访问数据的变量,而是通过指针来访问它。
#include <stdio.h>
#include <stdlib.h>
int main() {
// 动态分配内存
int *ptr = (int*)malloc(sizeof(int));
if (ptr == NULL) {
printf("内存分配失败!\n");
return 1;
}
// 使用解引用修改动态分配的内存
*ptr = 123;
printf("动态内存中存储的值: %d\n", *ptr); // 输出 123
// 释放动态内存
free(ptr);
return 0;
}
4、指针与数组的关系
在 C 和 C++ 中,数组名本身就是指向数组第一个元素的指针。解引用数组名相当于访问数组的第一个元素。
#include <stdio.h>
int main() {
// 定义一个整数数组 arr
int arr[] = {1, 2, 3};
// 定义一个指针 p,指向 arr 数组的第一个元素
int *p = arr;
// 通过解引用指针 p 访问数组中的第一个元素
printf("解引用指针 p,输出第一个元素: %d\n", *p); // 输出 1
// 通过解引用指针 p 加上偏移量来访问数组中的其他元素
p++; // 移动指针到 arr[1]
printf("解引用指针 p,输出第二个元素: %d\n", *p); // 输出 2
p++; // 移动指针到 arr[2]
printf("解引用指针 p,输出第三个元素: %d\n", *p); // 输出 3
return 0;
}