指针,其实很危险

咱们知道,指针是指向一个地址的。而指针的类型则代表了指针指向内容的大小,即包含字节数,这在对于指针的自增和自减中体现的很明确。数组

好比下面一段代码,咱们分别定义了3个不一样类型的指针,指向相同的地址,而后赋予不一样的值。这样一下咱们就明了了。spa


//解释代码
char *p_char;
short *p_short;
long *p_long;

p_char = (char*)0x1000;
p_short = (short*)0x1000;
p_long = (long*)0x1000;

*p_char = 0x12;
*p_short = 0x1234;
*p_long = 0x12345678;

从以上的代码咱们便可看出,不一样类型的指针,所能表示的数据大小不一样。并且须要注意的是,对指针的赋值操做。C语言使用指针的限制是,全部对于指针的操做必须是同类型的指针才能够进行。像0x1000这样只是一个数字而已,前面加上类型咱们才能知道咱们操做的地址指向的内容是多少字节。这样就能够把指针和地址区分开。而另外须要注意的是C语言为了提高效率对于指针做出了起始地址对齐的要求,好比short指针地址须要被2整除,而long指针地址则须要被4整除。指针的存在让咱们对内存的操做有了自由性,但自由的同时也增长了危险性。好比若是咱们定义指针类型时类型不一样,那么在自增或者自减时指针地址的偏移就会不一样。好比char型的指针,执行自增后指针地址加1,而short型和long型则分别是加2和加4.若是咱们编写程序中没有考虑到这点,那么很容易致使错误。并且相互连续定义的数组地址不必定连续。这些都是不当心就会犯错的地方。


参考《删繁就简——单片机入门到精通》指针


天天都进步一点。
code

相关文章
相关标签/搜索