定义
如果在程序中声明一个变量并使用地址作为该变量的值,那么这个变量就是指针变量。
指针的类型和它所指向变量的类型必须相同。
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。