学习C语言的同学,不可避免是要接触指针的。个人觉得,搞定指针,基本上算是半步精通了哈哈哈。但是很多同学基本上都在这个地方放弃了。当然,指针这把强大的宝剑,得用点心,因为一旦出错了,可能会导致整个工程都出现问题。
我们定义一个
int *p;
p是一个变量,这个变量的类型是指针类型,作用就是指向一个地址,这块地址所储存的数据类型是int型。可以变相的理解为,指针=地址。
借鉴一下在一本书里面的图:
注意:指针的大小取决于系统位数,比如系统32位,那么指针的大小就为4 byte。不管是int */char */float *…
首先来看第一个: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操作。
要注意的是,对于第一种偏移单位运算,单位的大小由指针的类型所决定,如果是int类型就以int位基数去偏移。
两个指针不能相加,但是两个指针可以相减(必须为同类型指针),指针相减的时候,表明两个内存相差多少个单位(单位由类型决定)
推荐一本好看的C语言书籍 《C语言深度解剖》,也是最近在看的书,里面讲的C语言会比较深入一点,我的许多内容都从书中借鉴而来,也是变相地给自己做个阅读总结。