微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 指针,其实很危险

指针,其实很危险

时间:11-21 来源:互联网 点击:
我们知道,指针是指向一个地址的。而指针的类型则表明了指针指向内容的大小,即包含字节数,这在对于指针的自增和自减中体现的很明确。

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

  1. //解释代码
  2. char*p_char;
  3. short*p_short;
  4. long*p_long;
  5. p_char=(char*)0x1000;
  6. p_short=(short*)0x1000;
  7. p_long=(long*)0x1000;
  8. *p_char=0x12;
  9. *p_short=0x1234;
  10. *p_long=0x12345678;


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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top