指针,其实很危险

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

比如下面一段代码,我们分别定义了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.如果我们编写程序中没有考虑到这点,那么很容易导致错误。而且相互连续定义的数组地址不一定连续。这些都是不小心就会犯错的地方。


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


每天都进步一点。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值