原创 C语言((int *)p)++

2009-8-24 14:55 3740 4 4 分类: 软件与OS

问:我有一个char *型指针碰巧指向一些int型变量,我想跳过它们。为什么((int *)p)++;这样的代码不行?


答:在C语言中,类型转换操作符并不意味着"把这些二进制位看作另一种类型,并作相应的处理"。这是一个转换操作符,根据定义它只能生成一个右值(rvalue)。而右值既不能赋值,也不能用++自增。(如果编译器接受这样的表达式,那要么是一个错误,要么是有意作出的非标准扩展。)要达到你的目的可以用:


p = (char *)((int *)p + 1);
或者,因为p是char*型,直接用

p += sizeof(int);
要想真正明白无误,你得用

int *ip = (int *)p;
p = (char *)(ip + 1);

但是,可能的话,你还是应该一开始就选择适当的指针类型,而不是一味地试图李代桃僵。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条