一:指针是什么
指针是一种变量,和int、char、float等一样,需要占用一定的内存;
例如:
int变量:在32位机器上占用 4 个字节; 在64位上也是 4 个字节,存储的是整型数字
int*指针变量:在32位机器上占用 4 个字节; 在64位上也是 8个字节,存储的是int变量的地址;
所以,说到底,指针也是一种变量,只不过是存储地址的变量;
二:指针类型的含义
一个指针变量存储了某个“字节”(注意是一个字节)的地址,通过指针能准确找到那个字节在在哪里;
在找到地址后怎么读取内存中的数据,就是指针类型的作用了;
例如:
int a;
int *p1 = &a;
char *p2 = (char*)&a;
p2[0] = 0x31;
p2[1] = 0x32;
p2[2] = 0x33;
p2[3] = 0x34;
//p2[4] = 0;
float *p3 = (float*)&a;
cout << "&a = " << &a << endl;
cout << "p1 = " << p1 << endl;
cout << "p2 = " << p2 << endl;
cout << "p3 = " << p3 << endl;
cout << "*p1 = " << *p1 << endl;
cout << "*p2 = " << *p2 << endl;
cout << "*p3 = " << *p3 << endl;
可以看到p2出现乱码;
解释:
地址 数据
0x008FF790, 0x31
0x008FF791, 0x32
0x008FF792, 0x33
0x008FF793, 0x34
0x008FF794, 未知
......................., 未知
所以从a的首地址开始一直往后读取,直到读取到‘\0’字符为止,但是从a的末地址之后数据是随机的,所以是乱码;
以上
int*,会从地址开始,按照int方式读取数据;
char*,会从地址开始,按照char方式读取数据;
其他,类似;