C中字符的增量

Dav*_*yen 0 c char do-while

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int count=0;
    char c=127;

    do
      count++;
    while(c++);
    printf("count=%d ",count);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么在第一次循环之后,c的值将变为-128?

Sha*_*ger 7

因为您的编译器默认charsigned char.因此它的值范围是-128到127,而递增127则触发环绕.如果要避免这种情况,请明确,并将变量声明为unsigned char.

请注意,要正确地做到这一点,你也要改变printf; 你打印为有符号int值(%d); 要100%类型正确,您需要匹配类型,因此格式代码应该是%hhd有符号的char,或者%hhu是unsigned char.%d由于varargs的推广规则会有效,但是一直使用它是一个坏习惯%d; 当打印unsigned%d,你的系统可能会成功,但它会显示大的数值为负,迷惑你.