定义
指针是什么?
在程序中,每一个变量的存储位置都比一样。但是,我们可以通过一定的语句,来取得数据在内存中的地址。其实,地址也是一种数据。存放地址用的变量类型就是指针变量,也成为指针。指针一般占用八个字节。
注意:指针变量是一种变量类型,并非一个变量。指针变量与int, char, float, double等这些关键词差不多。
指针在程序中的定义
写程序时,我们到底如何定义指针呢?
int b=12345;//这是一个常规的int变量
int* a;//这是一个int类型的指针
a=&b;//这是给指针a赋值的过程。&b代表变量b的地址,而我们用指针来存入其它变量的地址。
以上是一个int类型指针的定义,我们不难发现,指针的定义只不过是多了一个“*”号。
指针的不同之处
当然,指针显然有一个与其它变量类型的不同之处。为什么定义指针的时候要写int*?
int b=12345;//这是一个常规的int变量
char c;//这是一个常规的char变量
int* a;//这是一个int类型的指针
a=&b;//这是给指针a赋值的过程。&b代表变量b的地址,而我们用指针来存入其它变量的地址。
这是因为,指针中也有不同类型的指针。其中,int*就是整数类型指针。向以上程序中的整数类型指针a,它只能用来存储其它整数类型变量的地址。 如果我们要把char变量c的地址存入int类型指针a中,程序就会报告错误。
应用
指针与数组
我们经常会把数组和指针结合起来使用。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10]={2,7,8};
cout<<*a<<endl;
//cout<<a;指的是输出数组a的第一个元素(即a[0])的值
//因此cout<<*a;指的是输出数组a的第一个元素(即a[0])的地址
cout<<*(a+1)<<endl;
//cout<<a;指的是输出数组a的第一个元素(即a[0])的值,而这里的a+1指的是a[0+1]的值
//因此cout<<*(a+1);指的是输出数组a[0+1](即a[1])的地址
return 0;
}
指针与结构体
我们经常会把指针与链表结合起来使用。
#include<bits/stdc++.h>
using namespace std;
struct node{
int a;
int b;
node *next;//一个node类型的指针,用来指向链表中下一个数据的位置。
//next必须是node类型的指针,因为它既要指向下一个数据.a的位置,又要指向下一个数据.b的位置
};
int main(){
node x;//这使得x有x.a和x.b
node *p;//有存储node数据.a和node数据.b的空间的指针
p=&x;//把x的地址存入p
(*p).a=1;//使得x.a=1;
p->b=2;//使得x.b=2;
//以上两行均为给 在位置为p的数据 的赋值方法
cout<<x.a<<" "<<x.b;
return 0;
}
感谢阅读