2013-11-10 2 views
0

Мое назначение - напечатать двоичное значение десятичного числа, и я хочу контролировать размер массива, поскольку я понял, что должен сделать это, моя программа будет работать во всех компиляторах.sizeof с массивами в c

я кратко не понимаю SizeOf оператора, но я бы appriciate, если вы можете объяснить, где я должен, и почему, поставил 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]); 

Я должен поставить оператора. Это правильно?

+1

'sizeof' является одноместной operator: требуется только один операнд, а не два операнда. – ouah

+0

спасибо @ouah. если я напишу decNum = sizeof (без знака); это поможет моей цели? – Alan

+0

Sizeof принимает выражение как операнд. 'expression1, expression2' является выражением. (но, вероятно, не то, что было предназначено) – wildplasser

ответ

1

sizeof - унарная операция, то есть требуется только один операнд или аргумент.

+0

Спасибо. @SunEric, так как это может помочь мне достичь цели - моя программа будет работать в компиляторах, где int 128 бит. если я напишу decNum = sizeof (без знака); это поможет моей цели? – Alan

1

http://en.wikipedia.org/wiki/Sizeof

Sizeof предназначен для измерения байт-длины типа данных в C (и C++). Так что, если бы я должен был написать

size_t a = sizeof(int); 

а будет обычно равна 4 (см комментарий Джонатана Леффлера). Это связано с тем, что для 32-разрядного целого требуется 4 байта памяти (32 бита/8 бит в байте = 4).

Отвечая на вопрос о переносимости, sizeof (int) должен работать на любом компиляторе.

Вы могли бы найти этот вопрос полезным: Is the size of C "int" 2 bytes or 4 bytes?

Чтобы установить размер вашего массив символов в битовом размером с междунар, это должно работать:

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

спасибо. Я понимаю разницу, но я не могу понять, как реализовать sizeOf в своей программе. @Namfuak – Alan

+0

Зачем вам нужно знать размер конкретного интегрального типа, который использует ваша программа? – IllusiveBrian

+0

Я беспокоюсь, что мой массив будет слишком длинным для другого компилятора, поэтому я хочу установить его на определенный размер. – Alan

Смежные вопросы