问:我有一个char *型指针碰巧指向一些int型变量,我想跳过它们。为什么((int *)p)++;这样的代码不行?
答:在C语言中,类型转换操作符并不意味着"把这些二进制位看作另一种类型,并作相应的处理"。这是一个转换操作符,根据定义它只能生成一个右值(rvalue)。而右值既不能赋值,也不能用++自增。(如果编译器接受这样的表达式,那要么是一个错误,要么是有意作出的非标准扩展。)要达到你的目的可以用:
p = (char *)((int *)p + 1); |
p += sizeof(int); |
int *ip = (int *)p; |
但是,可能的话,你还是应该一开始就选择适当的指针类型,而不是一味地试图李代桃僵。
文章评论(0条评论)
登录后参与讨论