跳至内容
响水凹
欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki
用户工具
登录
站点工具
搜索
工具
显示页面
过去修订
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您的足迹:
computer:c:tips:invalid_pointer
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== 无效指针的特例 ====== 无效指针(invalid pointer)是值不为NULL,但并没有引用一个有效的对象或函数的指针。 任何使用无效指针的操作结果都是未定义的(undefined),可能导致运行时错误(run-time error),保证指针有效性是程序员的责任。 唯一的例外与数组有关:C标准规定了数组最后一个元素之后的那个地址是被定义的,虽然该地址同样是无效的,但可以使用该地址进行一些指针运算。 比如,我们常用的遍历数组代码: <code c> int array[N]; int *p; for (p = array; p < &array[N]; p++) { ... } </code> 这里&array[N]是无效的(数组最后一个元素地址是&array[N-1])。 更具体的说,指针p与整数k的算术运算p+k或p-k,p必须在上述的数组地址定义范围内(&array[0]~&array[N]),结果指针也必须在该范围内,计算才有意义,否则结果是未定义的(undefined)。 同样,两个指针p和q也必须在上述的同一个数组地址定义范围内,他们的减法p-q才是有意义的。 对于两个指针p和q的关系比较如p<q,除了在同一个数组的地址定义范围内这种情形,也可以是指向同一个struct/union对象的不同内部成员的指针。对struct对象而言,p<q表示q指向的成员在p指向的成员后面定义,而union对象的所有成员的地址都是相同的。 {{tag>C语言}}
computer/c/tips/invalid_pointer.txt
· 最后更改: 2014/11/01 02:02 由
127.0.0.1
页面工具
显示页面
过去修订
反向链接
回到顶部