指针,其实很危险
比如下面一段代码,我们分别定义了3个不同类型的指针,指向相同的地址,然后赋予不同的值。这样一下我们就明了了。
本文引用地址:https://www.eepw.com.cn/article/201611/319102.htm- //解释代码
- 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.如果我们编写程序中没有考虑到这点,那么很容易导致错误。而且相互连续定义的数组地址不一定连续。这些都是不小心就会犯错的地方。
参考《删繁就简——单片机入门到精通》
评论