prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 4.5

我有一个char *指针,它碰巧指向一些int,我想逐个遍历它们。为什么不行?

((int *)p)++;
的函数调用是否会工作?


在 C 语言中,类型转换运算符并非“假装这些位具有不同的类型,并据此进行处理”;它是一个转换运算符,根据定义,它产生一个纯右值(rvalue),纯右值不能被赋值,也不能用++自增/自减运算符进行操作。(如果某个编译器接受上述表达式,那要么是意外,要么是某种故意但非标准的扩展。)明确你的意图:使用

	p = (char *)((int *)p + 1);
或(因为p是一个char *)直接使用
	p += sizeof(int);
或(为了更加明确)
	int *ip = (int *)p;
	p = (char *)(ip + 1);

然而,尽可能地,你应该在最初就选择合适的指针类型,而不是试图将一种类型当作另一种类型来处理。

另请参阅问题 16.7

参考资料:K&R2 第 A7.5 节,第 205 页
ISO 第 6.3.4 节
Rationale 第 3.3.2.4 节
H&S 第 7.1 节,第 179-80 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管