C/C++语言指针使用总结

1、C语言中的指针

在C/C++语言中经常用到指针的概念,指针通常在教学上被形象的解释为一个房间的门牌号,在计算机的世界里,指针实际上就是与地址相关的东西。在32位机器中,指针实际上也可以当作占用四个字节大小的无符号整形来看待,其主要意义是用来解决计算机底层问题的主要产物,因为在底层程序设计过程中,需要操作许多物理设备,而这些设备通常需要同过一个物理意义上的地址才能被访问修改等。

2、指针的分类

从各大类型教材中,对指针类型进行了一个详细的分类,不同类型的指针在使用时有着各自不同的功能,这个与计算机语言的设计相关,是为了让编译器能更好的处理程序设计逻辑。而在实际应用过程中,指针就是一个概念性的东西,它仅仅标示了一个内存空间的起始地址(计算机存储空间的最小单位为字节8bit),我们在处理指针这个抽象的东西完全可以把它想象成国家管理一个个门牌地址,为了更好的管理这些门牌地址,我们对门牌地址进行了编号,要访问哪个门牌地址,我们只需要知道其门牌地址就可以了(当然需要在你访问权限内);而你的访问范围就相当于一个家庭占取的门牌地址个数。比如一个整形的指针,就可以形象的理解为一个aa家庭占用了四个门牌号。

3、指针本身

在计算机程序执行过程中,我们需要用到指针去访问对应内存的内容,实际上指针也是一个变量,它是需要存储在内存空间里面的,在32位系统中,针对指针变量,会为其分配4个字节大小内存空间存放其信息,在64为系统中,指针变量的内存占用为8个字节。

4、指针类型的相互转换与指针与普通类型的转换

指针可以标示一段内存空间,指针本身也要占用内存空间,在计算机的世界里,有了内存空间则可以做很多事情。比如下面这个用法。

int * p = 0;
int    i  = 0;
char str[4];
i = (int)(&p);
*((int**)i) = str;
str[0] = 3;
str[1] = 0;
str[2] = 0;
str[3] = 0;
printf("*p = %u\r\n",*p);
上面这段代码会输出多少呢?在大端存储的计算机上会输出*p = 3,在小端存储的计算机上会输出*p = 50331648
分析:dd
这段代码最终会让指向str的内存空间。i=(int)(&p)把指针变量p的内存空间地址赋值给i,此时i中存储的是指针变量的首地址。*((int*)i) =str则将i中所存的内容当作一个二级指针使用,因为其指向p的内存,所以实际上是给p所指向的内存空间赋值成str的地址,所以当最后输出p所指向的内存空间的值时,就相当于以无符号整形的方式访问str的内存空间的值。

你可能感兴趣的:(C语言学习之路)