2015-03-09 2 views
-2

Почему вывод следующей программы: d?Использование `+` в спецификаторах формата в c

А также, пожалуйста, объясните использование + в инструкции printf.

‪#‎include‬"stdio.h" 
int main(){ 
    int a=1; 
    printf("%d"+a); 
    return 0; 
} 
+2

Это 'printf' так же, как' Е ("D"), 'потому что добавление' a' (1) для ' "% d"' приведет ' "d"'. –

ответ

1

Выход

d 

, потому что вы добавляете a указателя формата. Формат выглядит "d" сейчас. a не воспринимается как параметр printf.

5

Проблема в том, что строковый литерал, такой как "%d", фактически представляет собой массив (который в этом случае преобразуется в указатель).

Когда вы "%d"+a, вы не добавляя a в строковый литерал, вы принимаете указатель, который указывает на эту строку, добавив a к нему, и печать результата.

С a является 1, вы собираетесь печатать, начиная один символ после начала "%d", который был бы "d"

Ваш код эквивалентен следующему:

#‎include‬"stdio.h" 
int main(){ 
    const char* str = "%d"; 
    printf(str+1); 
    return 0; 
} 
-2

printf() принимает format в качестве первого параметра, затем с переменными для замены форматированных переменных. Вы пытаетесь использовать + для конкатенации строк, например, в Java. То, что вы, скорее всего, имел в виду, чтобы сделать это:

#‎include‬"stdio.h" 
int main(){ 
    int a=1; 
    printf("%d", a); 
    return 0; 
} 
+0

Не отвечает на вопрос вообще. – alk

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