Java教程

让人头疼的指针

本文主要是介绍让人头疼的指针,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

让人头疼的指针

    • 指针在内存中的样子
    • int *p = NULL 与 *p = NULL的区别
    • 向指定的地址写入数值
    • 指针的运算 *(P+1)和 *p+1

学习C语言的同学,不可避免是要接触指针的。个人觉得,搞定指针,基本上算是半步精通了哈哈哈。但是很多同学基本上都在这个地方放弃了。当然,指针这把强大的宝剑,得用点心,因为一旦出错了,可能会导致整个工程都出现问题。

指针在内存中的样子

我们定义一个
int *p;
p是一个变量,这个变量的类型是指针类型,作用就是指向一个地址,这块地址所储存的数据类型是int型。可以变相的理解为,指针=地址。

借鉴一下在一本书里面的图:
在这里插入图片描述
注意:指针的大小取决于系统位数,比如系统32位,那么指针的大小就为4 byte。不管是int */char */float *…

int *p = NULL 与 *p = NULL的区别

首先来看第一个:int * p = NULL;
这里的意思是定义一个指针p,其指向的内存里面保存的数据类型是int型,在定义这个p的时候把p的值设为0x00000000。注意,不是把*p设置成0x00000000。

再来看第二个:
int *p;
*p = NULL;
第一行代码只是定义了一个指针变量p,也是保存int类型数据,但是p本身的值是多少就不知道,可能是个非法地址。那么我们对这个地址进行赋值为NULL的时候,编译器可能会报错。

向指定的地址写入数值

比如我们需要向0x1234ff写入一个数值10,我们可以直接通过指针来搞定。
int * p = (int *)0x1234ff;
*p = 10;
so easy ~ ~

指针的运算 *(P+1)和 *p+1

*(p+1),它的意思是先偏移一个单位,再去引用内存;
*p+1 ,它的意思是先引用内存 *p,获取到数值之后,在进行+1操作。

要注意的是,对于第一种偏移单位运算,单位的大小由指针的类型所决定,如果是int类型就以int位基数去偏移。

两个指针不能相加,但是两个指针可以相减(必须为同类型指针),指针相减的时候,表明两个内存相差多少个单位(单位由类型决定)

推荐一本好看的C语言书籍 《C语言深度解剖》,也是最近在看的书,里面讲的C语言会比较深入一点,我的许多内容都从书中借鉴而来,也是变相地给自己做个阅读总结。

这篇关于让人头疼的指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!