指针:C语言的一种数据类型和地址
概念:为了方便访问内存中存储的内容,系统给每一个内存单元(字节),一个编号,该编号就是地址也就是指针。
地址的编号以16进制形式输出
指针变量:存储指针(地址)的变量
定义:类型(指针指向的类型:指针变量保存的是哪一种数据类型变量的地址) *指针变量名;
类型(指针变量的类型) 指针变量名;
内存大小:固定值4个字节
指针运算符:
1.&取地址 保证&的后面必须有地址,后面是常量便会报错
2.*取内容 解析引用符,*后必须是地址
指针变量赋值赋值:
1.相同类型变量的地址
2.相同类型的指针变量
指针偏移:指针+整数
p+1;1表示1个单位,1个单位多大,看指针指向的类型大小
void* pvoid 指向任意类型 但是其他类型不能指向它 不能偏移或者读取数据 用的时候进行强转
0地址:不能存储数据 用来判断指针有没有指向
整型提升的过程中值是不会发生改变,只有数据溢出才会发生改变
指针练习:
//定义一个int型变量n(系统分配内存:4个字节)
int n = 10;
cout << &n << endl;
//指针变量的类型和指针变量指向的类型
int *pn;//定义时*没有实际意义,仅仅表示定义的是一个指针
pn = &n;//pn保存了变量n的地址
cout << pn << endl;//指针变量指向的地址
cout << &pn << endl; //指针变量自己的地址
//求指针类型所占字节数
cout << sizeof(short*) << endl;//4
//*指针变量名=指针变量指向的变量
cout << *pn << endl;//*pn=*&n=n
*pn = 100;
cout << n << endl;//100
int m = 0x1234ab56;
char* pchar = (char*)&m;
cout << hex << (int)*pchar << endl;//56
short* pshort = (short*)&m;
cout << hex << *pshort << endl;//ab56
m = 0x5612cdab;
pchar = (char*)&m;
cout << hex << (int)*pchar << endl;//ffffffab
unsigned char *puchar = (unsigned char*)&m;
cout << hex << (int)*puchar << endl;//ab
pshort = (short*)((int)pshort + 1);
cout << *pshort << endl;//12cd
int a[5] = { 1, 2, 3, 4, 5 };// 00/00/00/05 00/00/00/04 00/00/00/03 00/00/00/02 00/00/00/01
pshort = (short*)a;
pshort = (short*)((int)pshort + 1);
cout << *pshort << endl;//0
short b[5] = { 1, 2, 3, 4, 5 };// 00/05 00/04 00/03 00/02 00/01
int *pb = (int*)b;
cout << hex << *pb << endl;//20001
pb = (int*)((int)pb + 1);
cout << *pb << endl;//3000200
pb = (int*)b;
cout << *(pb + 1) << endl;//40003
pb = 0;//0地址 不能存储数据
pb = nullptr;//NULL
int y = 0;//整数0
cout << pb + 1 << "," << y + 1 << endl;