Почему вывод следующей программы: d
?Использование `+` в спецификаторах формата в c
А также, пожалуйста, объясните использование +
в инструкции printf.
#include"stdio.h"
int main(){
int a=1;
printf("%d"+a);
return 0;
}
Почему вывод следующей программы: d
?Использование `+` в спецификаторах формата в c
А также, пожалуйста, объясните использование +
в инструкции printf.
#include"stdio.h"
int main(){
int a=1;
printf("%d"+a);
return 0;
}
Выход
d
, потому что вы добавляете a
указателя формата. Формат выглядит "d"
сейчас. a
не воспринимается как параметр printf
.
Проблема в том, что строковый литерал, такой как "%d"
, фактически представляет собой массив (который в этом случае преобразуется в указатель).
Когда вы "%d"+a
, вы не добавляя a
в строковый литерал, вы принимаете указатель, который указывает на эту строку, добавив a
к нему, и печать результата.
С a
является 1, вы собираетесь печатать, начиная один символ после начала "%d"
, который был бы "d"
Ваш код эквивалентен следующему:
#include"stdio.h"
int main(){
const char* str = "%d";
printf(str+1);
return 0;
}
printf() принимает format в качестве первого параметра, затем с переменными для замены форматированных переменных. Вы пытаетесь использовать +
для конкатенации строк, например, в Java. То, что вы, скорее всего, имел в виду, чтобы сделать это:
#include"stdio.h"
int main(){
int a=1;
printf("%d", a);
return 0;
}
Не отвечает на вопрос вообще. – alk
Это 'printf' так же, как' Е ("D"), 'потому что добавление' a' (1) для ' "% d"' приведет ' "d"'. –