计算机中所有的数据都是以二进制的形式存放在内存中的,不同类型的数据占用的内存大小(二进制长度)也是不同的。
C++中的数据类型,比如 int、char、 double 。例如 int 占用四个字节(Byte)、char占用个字节、double占用八个字节。(参考文末附录,1Byte = 8Bit)。
计算机对数据的每个字节进行编号,就像门牌号一样,而且每个字节的编号都是唯一的,根据编号就能定位到某个字节。编号一般用十六进制表示,如下:
地址从0开始依次增加,对于32位环境下,应用程序能够申请使用的内存是4G(232),所以最小地址是 0x00000000,最大地址是 0xFFFFFFFF。
一、什么是指针
我们将内存中字节的地址(编号)称为指针。所以当我们提到指针的时候,它指代的就是地址。
#include <iostream>
using namespace std;
int main(){
int a = 100;
//变量a的值
cout << a << endl;//100
//变量a在内存中的地址
cout << &a << endl;//0x6ffe1c
return 0;
}
0x6ffe1c 就是 0x006ffe1c,当然在运行的时候这个值并不是固定的,每次输出可能对应的值不一样。
二、指针变量
数据在内存中的地址,称为指针,如果一个变量存储了这个数据的指针(地址),则称为指针变量。
指针变量,也是变量,和普通的变量定义格式基本一致。
-
只不过需要在变量名前面加上一个星号 *
-
指针变量存储的数据类型的地址
指针变量的定义语法是:
type *name;
比如:
int *a; //a是存储整数类型所在地址的指针变量
int b;
你可以把 int*
看成一个整体,更方便理解一些,int*
表示指针类型。
int* a; //这种写法也可以,初学者更好理解
int b;
但是,我们习惯写成 int *a
,因为 *a
的结果是 int
类型的值,对值的操作更常见。
#include <iostream>
using namespace std;
int main(){
int b = 100;
int *a = &b; //b的地址值放到指针变量a中,叫指针变量赋值
cout << *a << endl; //取值 100
cout << a << endl; //指针变量a的值是地址 0x6ffe14(也就是b的地址)
return 0;
}
也就是说,针对不同的数据类型,都可以有对应的指针变量。
附录:C++数据类型
最大值和最小值是这个数据类型表示的大小范围。