铸造指针的算法

时间:2015-02-27 05:25:16

标签: c pointers casting pointer-arithmetic

下面的代码将传递的字符串打印为十六进制值,我用它来检查在串行网络上传输之前包含不可打印字符的字符串。我理解代码,但我不确定为什么如果我们假设我的系统上的int是4个字节,则每次循环计算(unsigned int) *s++时指针不会前进4个字节。有人可以解释为什么会这样吗?是否存在某种类似于算术运算符的运算符预测值?

static void printhexstring(const char *s) {
while(*s) {
    printf("<%02X> ", (unsigned int) *s++);
}
printf("\n");
}

1 个答案:

答案 0 :(得分:0)

printf("<%02X> ", (unsigned int) *s++);

您正在递增s类型的指针char,当此增量完成时,指针s将移动一个字节而不是4个字节。 这里的转换对指针算术没有影响。

%X将unsigned int转换为unsigned hexa并显示值,以便您拥有强制转换unsigned int