一 概述
由于不同类型的变量在内存中所占用的字节不同,而指针又是用来保存内存地址的变量,因此指针只能存储与它类型相同的变量的地址
二 代码及输出
2.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include<iostream> using namespace std; int main() { double a = 3.14; int b = 6; int *p1 = &b; double *p2 = &a; cout << "p1:" << p1 << endl; cout << "p2:" << p2 << endl; cout << endl; p1++; p2++; cout << "p1:" << p1 << endl; cout << "p2:" << p2 << endl;
return 0; }
|
2.2 结果
1 2 3 4 5
| p1:0x22fe34 p2:0x22fe38
p1:0x22fe38 p2:0x22fe40
|
2.3 代码说明
- double a;定义了一个双精度型变量a.编译器接到此定义通知后会在内存中开辟一块内存区域。该区域的大小刚好可以存放双精度型数值。
- int *p;定义了一个指向整型变量的指针变量p.编译器知道了指针指向的类型,才能对其进行正确的处理与运算
三 总结
- 由于指针类型的不同决定了指针运算方式的不同,所以我们不能将一种类型的指针赋给另一种类型的指针
- 这就是指针与变量类型的关系,指针的类型必须与它所指向的变量的类型相匹配。假如不相匹配,那么就会报错