指针,其实很危险
2011-12-26 10:37
162 查看
我们知道,指针是指向一个地址的。而指针的类型则表明了指针指向内容的大小,即包含字节数,这在对于指针的自增和自减中体现的很明确。
比如下面一段代码,我们分别定义了3个不同类型的指针,指向相同的地址,然后赋予不同的值。这样一下我们就明了了。
从以上的代码我们即可看出,不同类型的指针,所能表示的数据大小不同。而且需要注意的是,对指针的赋值操作。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.如果我们编写程序中没有考虑到这点,那么很容易导致错误。而且相互连续定义的数组地址不一定连续。这些都是不小心就会犯错的地方。
参考《删繁就简——单片机入门到精通》
每天都进步一点。
相关文章推荐
- 当你感觉最安全的时候其实是最危险的时候
- 指针结构体函数-其实可以这样详细理解
- 认识指针(c语言),其实指针没有你想的那么难!
- Java中提到的引用其实是指针(C转java要注意)
- 指针的危险
- 返回本地变量的指针是很危险的
- intptr_t 其实不是指针类型
- 漫谈C指针:函数名其实也是指针
- string类型其实就是一个指针
- 返回局部变量的指针很危险
- Windows系统最新漏洞 ->高危险ANI鼠标指针漏洞非官方免疫补丁
- 一般函数指针和类的成员函数指针——其实是调用约定惹的事
- 你必须知道的指针基础-3.指针的移动及指针的危险
- delphi中的对象其实也是一种指针
- C/C++ ------ 函数参数 为指针或引用时 强制转化 非常危险
- delete void*形式的指针是非常危险的
- Qt 代码: 子窗口调用父窗口(其实就是用指针直接访问)
- 高危险ANI鼠标指针漏洞非官方免疫补丁
- 指针的危险
- 漫谈C指针第十五讲---函数名其实也是指针