指针类型貌似说好像没有多大的用处,想必你看过这篇文章后对于指针类型有的意义就会有一定的认识。
前言
指针变量的大小和类型并无关系,只要是指针变量,在同一个平台或者说在同一个环境之中(如x86 或者 x64中),大小都是一样的,那为什么还有各种各样的指针类型呢?其实真指针类型是偶特殊意义的,接下来可以从这三个方面去理解。
一、指针变量的解应用
示例:
//代码1
#include <stdio.h>
int main()
{
int a=0x11223344;//0x11223344占4个字节,两个十六进制位占一个字节,一个八进制位占一个字节,一个字节等于8个比特位
int* pa=&a;
*pa=0;//解引用
return 0;
}
//代码2
#include <stdio.h>
{
int a=0x11223344;
char* pa=(char*)&a;
*pa=0;//解引用
return 0;
}
结论1:
通过调试后我们发现,代码1会将a的所用字节全部改0,但代码2只是将a的首字节改为了0;
指针变量的类型决定了对解引用指针的时候有多的权限(一次可以操作几个字节)。
很明显,char*对其解引用的时候只能解引用一个字节,int对其解引用的时候可以解引用4个字节。
二、指针的+-整数
先看一串代码,如下(示例):
#include <stdio.h>
int main()
{
int a = 10;
char* pc = (char*)&a;//字符形式的访问
int* pi = &a;
printf("%p\n",&a);
printf("%p\n", pc);
printf("%p\n", pc + 1);
printf("%p\n", pi);
printf("%p\n", pi + 1);
return 0;
}
运行的结果
结论2:
指针类型决定了指针向前或者向后走一步有多大(距离),即所谓的步长。
规律如下:
三、void*指针
解释:无具体类型的指针
用处:一般是函数参数的部分,用来接收不同类型的地址,这样的设计可以实现泛型编程的效果,使得函数可以处理多个类型的数据。
总结
1、指针变量的类型决定了对解引用指针的时候有多的权限(一次可以操作几个字节)。
2、指针类型决定了指针向前或者向后走一步有多大(距离),即所谓的步长。
3、这一点其实需要在《深入理解指针》可以涉及到。