C++:指针

定义

指针是什么?

在程序中,每一个变量的存储位置都比一样。但是,我们可以通过一定的语句,来取得数据在内存中的地址。其实,地址也是一种数据。存放地址用的变量类型就是指针变量,也成为指针。指针一般占用八个字节。

注意:指针变量是一种变量类型,并非一个变量。指针变量与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;
}

感谢阅读 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值