指针是c++从c语言中继承过来的重要数据类型,它提供了一种较为直接的地址操作手段。
1 数据在内存中的地址
对于高级语言来说,我们是通过定义变量的方式来为数据分配内存空间,使得变量名与该变量所占内存空间相联系 的,然后通过变量名来操作数据,也就是访问数据所占的内存空间。
1.1 变量的地址
变量具有值和地址,要得到一个变量的地址,需要进行地址的运算(&)。比如:
#include<span style="font-family:SimSun;"><iostream></span>
using namespace std ;
<span style="font-family:SimSun;">int main()
{
</span>int a = 3; // a 是名字,3 是内容,地址可以假设是0x12345678 (通常就是32位地址<span style="font-family:SimSun;">)</span>
cout<<&a<<<span style="font-family:SimSun;">':'<<a<<endl;
//&a是取a的地址,变量名a表示内容
return(0);
</span>
<span style="font-family:SimSun;">}</span>
输出结果是:
12345678:3
1.2 一维数组在内存中的存储
一维数组在内存中是连续存储的。
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
char x[]="12345678";
char y[]="123456789abcd";
cout<<x<<endl;
cout<<y<< endl;
}
输出结果为:
12345678
123456789abcd
注意:数组的下标切勿越界,否则会有麻烦的
1.3 多维数组在内存中的存储
二维数组是按行存储的。
#include <iostream>
using namespace std;
int main()
{
int imax = 0;
int i, j;
int a[2][3] = { {1, 2, 3}, { 4, 5, 6} }; //二维数组定义并初始化。
cout<<"按行输出二维数组a的各元素的值如下:"<<endl;
for( i=0; i<2; i++)
{
for( j=0; j<3; j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
}
//求二维数组元素中的最大值
for( i=0; i<2; i++)
{
for( j=0; j<3; j++)
{
if (imax<a[i][j])
{
imax=a[i][j];
}
}
}
cout<<"二维数组元素中的最大值为"<<imax<<endl;
return 0;
}
2 指针和指针运算
2.1 定义指针并通过指针访问变量
我们可以通过变量名访问一个变量,也可以通过其内存地址来访问它,这就是指针。
T* name;
其中T就是类型,可以是int,float,char,short等内容;*便是该变量的类型为指针;name是定义的指针名称。
int p;//这仅仅是一个普通的变量
int* p;//int*也表示一种数据类型:int指针类型。所以p的类型为:int*类型,p所指向的类型为int型