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; }