c语言中带数组的sizeof

c语言中带数组的sizeof,c,string,chars,C,String,Chars,我的任务是打印十进制数的二进制值,我想控制数组的大小,因为我知道我应该这样做,所以我的程序可以在所有编译器中运行 我不能简单地理解运算符sizeof,但如果您能解释我应该在哪里以及为什么将sizeof放入我的程序中,我将不胜感激: void translate_dec_bin(char s[]){ unsigned int decNum; char st[MAX_LEN] = { 0 }; int j = 0; sizeof(decNum, 4); dec

我的任务是打印十进制数的二进制值,我想控制数组的大小,因为我知道我应该这样做,所以我的程序可以在所有编译器中运行

我不能简单地理解运算符sizeof,但如果您能解释我应该在哪里以及为什么将sizeof放入我的程序中,我将不胜感激:

void translate_dec_bin(char s[]){
    unsigned int decNum;
    char st[MAX_LEN] = { 0 };
    int j = 0;
    sizeof(decNum, 4);
    decNum = atoi(s);

    while (decNum > 0){
        st[j] = decNum % 2;
        decNum = decNum / 2;
        j++;
    }

    while (j >=0){
        printf("%d", st[j]);
        j--;
    }
    printf("\n");

}
我的想法是,当我打印号码时,即在代码中:

printf("%d", st[j]);

我应该叫接线员。是否正确?

sizeof
是一个一元运算,意味着它只需要一个操作数或参数。

Sizeof用于测量C(和C++)中数据类型的字节长度。所以,如果我要写

size_t a = sizeof(int);
a通常等于4(见Jonathan Leffler的评论)。这是因为32位整数需要4个字节的内存(32位/8位字节=4)

回答您关于可移植性的问题,sizeof(int)应该适用于任何编译器

您可能会发现这个问题很有用:

要将char数组的大小设置为int的位大小,应执行以下操作:

const size_t intsize = sizeof(int) * 8;//sizeof returns size in bytes, so * 8 will give size in bits
char st[intsize] = { 0 };

sizeof
是一个一元运算符:它只需要一个操作数,而不是两个操作数。谢谢@ouah。如果我写decNum=sizeof(无符号);这对我的目标有帮助吗?Sizeof使用表达式作为操作数<代码>表达式1、表达式2是一个表达式。(但可能不是预期的)@wildplasser:
sizeof
将表达式(特别是一元表达式)或括号中的类型名作为其操作数。(我个人不会将后一种情况描述为应用于操作数的运算符,但标准就是这样描述的。)注意:在使用数组的
大小时要非常小心。谢谢@那么它如何帮助我实现这个目标呢?我的程序将在int为128位的编译器中工作。如果我写decNum=sizeof(无符号);这对我的目标有帮助吗?谢谢。我理解其中的区别,但我无法理解如何在程序中实现sizeOf@Namfuak为什么您需要知道您的程序正在使用的特定整数类型的大小?我担心我的数组对于另一个编译器来说太长,所以我想将它设置为某个大小。哦,我明白您的意思,我会更新我的答案。请小心断言
sizeof(int)==4
。虽然这是最常见的大小,但有些计算机的
sizeof(int)==2
sizeof(int)==8
,甚至
sizeof(int)==1
(但是
CHAR\u位==64
所以所有值都是64位值,
sizeof(short)==1
)。