📅  最后修改于: 2023-12-03 14:59:36.342000             🧑  作者: Mango
指针是C/C++的核心概念之一,掌握指针是成为一名合格程序员的重要基础。本文将详细介绍指针的定义、用法及示例。
指针是一个变量,存储的是另一个变量的地址。使用指针可以直接访问或修改存储在给定地址上的变量的值。
指针的声明格式为:数据类型 * 指针变量名
其中,数据类型
表示指针指向变量的数据类型,*
表示指针类型的声明符,指针变量名
表示指针变量本身的名称。例如,下面的代码声明了一个指向int类型变量的指针变量ptr:
int *ptr;
&
是一元运算符,用于返回其操作数的地址。例如,&a
表示变量a的地址。
int a = 5;
int *ptr = &a; // ptr指向变量a的地址
*
也是一元运算符,用于返回指针所指向地址储存的变量的值。例如,*ptr
表示ptr指针所指向的地址中储存的值。
int a = 5;
int *ptr = &a;
cout << *ptr << endl; // 输出变量a的值5
定义和初始化指针变量后,可以进行以下操作:
int a = 5;
int *ptr = &a; // 定义并初始化ptr指针变量,指向变量a的地址
cout << "a的值:" << a << endl; // 输出变量a的值
cout << "a的地址:" << &a << endl; // 输出变量a的地址
cout << "ptr指针的地址:" << &ptr << endl; // 输出ptr指针的地址
cout << "ptr指向的地址:" << ptr << endl; // 输出指向的地址
cout << "ptr指向的地址中储存的值:" << *ptr << endl; // 输出ptr指向的地址中储存的值
输出结果为:
a的值:5
a的地址:0x7fff5fbff7e4
ptr指针的地址:0x7fff5fbff7e8
ptr指向的地址:0x7fff5fbff7e4
ptr指向的地址中储存的值:5
使用指针可以方便地交换两个变量的值,具体做法是:定义一个指向数据类型的指针变量,将其初始化为变量的地址,然后使用解引用运算符*访问该地址中储存的变量的值。
void swap(int *a, int *b) { // 使用指针交换两个变量的值
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 5, y = 10;
cout << "交换前:x=" << x << ",y=" << y << endl;
swap(&x, &y);
cout << "交换后:x=" << x << ",y=" << y << endl;
return 0;
}
输出结果为:
交换前:x=5,y=10
交换后:x=10,y=5
指针数组是数组的每个元素都是指向同一类型变量的指针。下面的代码示例定义了一个指针数组,其中每个指针都指向一个整数。
int main() {
int a = 5, b = 10, c = 15;
int *ptr[3] = {&a, &b, &c}; // 定义指针数组,每个元素都是指向int类型变量的指针
for(int i=0; i<3; i++) {
cout << "指针ptr[" << i << "]指向的地址中储存的值:" << *ptr[i] << endl;
}
return 0;
}
输出结果为:
指针ptr[0]指向的地址中储存的值:5
指针ptr[1]指向的地址中储存的值:10
指针ptr[2]指向的地址中储存的值:15
函数指针可以指向函数的地址,如果定义一个指向函数的指针,可以通过该指针来调用该函数。
#include <iostream>
using namespace std;
int add(int a, int b) { // 定义一个加法函数
return a + b;
}
int main() {
int (*p)(int, int);
p = add; // 将指针p指向add函数
int result = (*p)(2, 3); // 使用指针调用add函数
cout << "2 + 3 = " << result << endl;
return 0;
}
输出结果为:
2 + 3 = 5
本文介绍了指针的定义、用法及示例,指针是C/C++中重要的概念之一,掌握指针可以更好地理解和使用指针类型的数据,开发更强大、高效的程序。在实际开发中,指针常常用于数组、函数、结构体等数据类型中,是实现复杂算法和数据结构的重要基础。