理解
代码
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int a = 10;
char c = 'Y';
int* p;//定义一个指针变量p,这里面存的是地址,就像int 里面存的是整型变量一样
//int表示指针指向的数据类型
//*表示p是一个指针变量
char *p1;//指向char
p = &a;
p1 = &c;
cout << "a=" << a << endl;
cout << "p指向的内存里的值为" << *p << endl;//*为取值运算符
cout << "c=" << c << endl;
cout << "p1指向的内存里的值为" << *p1 << endl;
*p = 18;
cout << a << endl;
cout << "p指向的内存里的值为" << *p << endl;
//理解偏移
// 每个单位所占字节
//char *p1 // 1
//int *p2 // 4
//double *p3 // 8
//p1++每次加了1个字节 p2++加了4个 p3++加了8个单位
//尝试用数组
int a1[3] = { 1,2,3 };
int* pa = &a1[0];
cout << *pa << endl;
pa++;
cout << *pa << endl;
pa++;
cout << *pa << endl;
pa++;//此时下标越界
cout << *pa << endl;//输出乱码
return 0;
}
运行结果
a=10
p指向的内存里的值为10
c=Y
p1指向的内存里的值为Y
18
p指向的内存里的值为18
1
2
3
-858993460
野指针
只定义未标明指向对象,所以可能会指向重要数据,操作危险。
定义时可以养成这样子的习惯。
int *p = NULL;//指向空内存,空内存不会被改变
空指针
不确定指向对象的类型
void *p;//明确后可以再强制转换
指针的运算
对指针所指向的数据类型单位进行偏移
+ - ++ --
乘除的运算没有意义,所以说是会报错?还是无意义?