一、指针定义
指针是一个变量,通过这个变量,间接访问另一个变量,指针是C++中最重要的概念,如果搞不懂指针,C++就不算入门。指针的值为另一个变量的地址,在使用指针之前,需要对指针变量进行声明:
type *p;
type表示指针变量所指的变量的数据类型,‘*’表示p变量是一个指针变量,p表示指针变量,其值为所指变量的地址。
在定义指针时,需要用‘&’取得变量的地址:int *p=&a;
#include <iostream>
using namespace std;
int main ()
{
int a=10; //定义变量a
int *p=&a; //定义指针p,指向a的地址
cout <<p<<endl; //输出a的内存地址
cout <<*p<<endl; //输出a的值
return 0;
}
以上代码是将指针p指向变量a,并输出指针p的值和p指向的变量的值
二、指针的类型
指针的本质是整数,它指的是另一个数据的内存地址编号,指针的类型表明的就是它所指向的对象的期望类型,其取决于指向的对象:
//定义一个整型变量a,指针p1指向a
int a;
int *p1=&a;
//定义一个浮点型变量b,指针p2指向b
double b;
double *p2=&b;
三、指针的间接访问
其实质是交换指针,不交换实际数据。其应用场景为:对于实际问题中的待排序元素,可能是较为庞大的数据,交换数据本身付出的代价很大,所以我们可以交换指向该数据的指针值,用较小的代价实现想要的功能。
交换两个整型变量代码实现(实际上是交换的两个数据的内存地址):
int a=10;
int b=20;
int *p1=&a;
int *p2=&b;
cout<<"交换前:"<<*p1<<' '<<*p2<<endl;
//交换两个指针
swap(p1,p2);
cout<<"交换后:"<<*p1<<' '<<*p2<<endl;
输出结果为:
交换前:10 20
交换后:20 10
四、指针与一维数组
c++中规定数组名既代表数组本身,又代表整个数组的地址,还是数组首元素的地址值,即:与a第0个元素的地址& a[0]相同,下面两个语句是等价的:
p = a;
p = &a[0];
我们可以通过指针访问一维数组,循环中i表示输出的整数的个数:
int a[5]={1,2,3,4,5};
int *p=a;
//上行代码也可以写成 int *p=a[0]
for(int i=0;i<5;i++){
cout<<*p<<' ';
p++;
}
输出结果为:
1 2 3 4 5
结语:指针的用法多种多样,本文列举了一些基础的用法和使用场景,指针在C++学习中是基础且重要的一环,希望大家能够举一反三,日清日高。