指针,其实很危险
时间:11-21
来源:互联网
点击:
我们知道,指针是指向一个地址的。而指针的类型则表明了指针指向内容的大小,即包含字节数,这在对于指针的自增和自减中体现的很明确。
从以上的代码我们即可看出,不同类型的指针,所能表示的数据大小不同。而且需要注意的是,对指针的赋值操作。C语言使用指针的限制是,所有对于指针的操作必须是同类型的指针才可以进行。像0x1000这样只是一个数字而已,前面加上类型我们才能知道我们操作的地址指向的内容是多少字节。这样就可以把指针和地址区分开。而另外需要注意的是C语言为了提升效率对于指针作出了起始地址对齐的要求,比如short指针地址需要被2整除,而long指针地址则需要被4整除。指针的存在让我们对内存的操作有了自由性,但自由的同时也增加了危险性。比如如果我们定义指针类型时类型不同,那么在自增或者自减时指针地址的偏移就会不同。比如char型的指针,执行自增后指针地址加1,而short型和long型则分别是加2和加4.如果我们编写程序中没有考虑到这点,那么很容易导致错误。而且相互连续定义的数组地址不一定连续。这些都是不小心就会犯错的地方。
比如下面一段代码,我们分别定义了3个不同类型的指针,指向相同的地址,然后赋予不同的值。这样一下我们就明了了。
- //解释代码
- 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.如果我们编写程序中没有考虑到这点,那么很容易导致错误。而且相互连续定义的数组地址不一定连续。这些都是不小心就会犯错的地方。
参考《删繁就简——单片机入门到精通》
地址指 相关文章:
- 单片机第四次作业(11-25)
- 单片机系统中什么是数据、地址、指令(11-23)
- C51单片机地址指针及其应用(11-22)
- MCS-51单片机地址指针及其应用(06-06)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)