×
嵌入式 > 技术百科 > 详情

指针 其实并不安全

发布时间:2020-06-11 发布时间:
|
我们知道,指针是指向一个地址的。而指针的类型则表明了指针指向内容的大小,即包含字节数,这在对于指针的自增和自减中体现的很明确。

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

 

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

从上面的代码中我们可以看到,不同类型的指针可以代表不同的数据大小。并且应该注意的是指针的分配。使用C语言使用指针的局限性在于,对指针的所有操作都必须是相同类型的指针。就像0x1000只是一个数字一样,在添加类型之前,我们只能知道操作的地址所指向的字节数。这样,可以将指针与地址区分开。另外,应该注意,为了提高效率,C语言对指针提出了起始地址对齐要求。例如,短指针地址需要除以2,长指针地址需要除以4。指针的存在赋予我们内存操作的自由度,但是自由度也增加了危险。例如,如果我们以不同的方式定义指针类型,则在递增或递减时指针地址的偏移量将有所不同。例如,执行增量后,char类型的指针增加1,而short类型和long类型则分别增加2和4。如果我们在编写程序时没有考虑到这一点,很容易引起错误。此外,彼此连续定义的阵列地址不一定是连续的。这些都是可能发生错误的地方。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
中国国产第三代核电实现并网发电