指针全概念速通

定义

如果在程序中声明一个变量并使用地址作为该变量的值,那么这个变量就是指针变量。

指针的类型和它所指向变量的类型必须相同。

C++中关于int *p和 int* p的区别

都可以,int* p这种写法合法,但是容易造成误导。例如 int* p1, p2;表示含义是p1是一个int型的指针,p2是一个int型变量。而不是p1,p2都是指针变量,它们共用的是基本数据类型部分。

*的理解

*的正常理解是取值,但也可以理解成一种降维。

例如一个三维数组a[i][j][k],a本身和i是一个维度的。对他取一个*,是和j,k在一个维度的,如果再取一个*,是和k在一个维度的。

地址怎么取值

①*地址 ②地址[i]

结合一道例题来巩固一下基础知识的理解

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p=a[0];

cout<<*(p+9)<<endl;
cout<<*(*(a+2)+1)<<endl;
return 1;
}

上面这段代码输出的值是什么呢

那么接下来我们就来一起分析一下为什么是这个结果:

首先这个二维数组可以看成1 2 3 4 // 5 6 7 8 // 9 10 11 12

第一个结果:p的地址是a[0]的值,那么p对应的位置就是1的位置,那么在此基础上右移9个位置,结果自然就是10。

第二个结果:这个二维数组分成三部分看,可以分别看成a[0],a[1],a[2],也可以看成a,a+1,a+2(+代表偏移),那么a+2就是第三部分,第三部分从左开始向右偏移一个然后取值就是10。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值