#c
#c
Вопрос:
У меня есть следующая функция:
int do_something(...,const float writeArray[],...){
printf("%d",*writeArray);
return 0;
}
как я использую эту функцию:
do_something(...,amp;data[0],...);
где data[0]=1
очевидно, что мой код не так прост, но это иллюстрация проблемы. Когда я запускаю do_something, я получаю значение printf очень большого числа, например 23259894325. Что я делаю не так? Как мне сделать его printf 1 таким, каким он должен быть?
Ответ №1:
printf("%d",*writeArray);
Во-первых, вы печатаете первый элемент массива действительно странным образом. Если вы хотите это сделать, сделайте writeArray[0]
так, чтобы другие люди могли прочитать ваш код.
Во-вторых, %d
предназначен для печати целых чисел, но writeArray
полон чисел с плавающей запятой. Попробуйте использовать %f
. Вам нужно использовать правильную строку формата для каждого типа.
do_something(...,amp;data[0],...);
Это действительно сбивает с толку. Вам нужен указатель на первый элемент массива? Или вы просто пытаетесь передать весь массив? Если вы хотите передать массив (как предполагает ваша более поздняя сигнатура функции), просто сделайте это:
do_something(...,data,...);
Массивы превращаются в указатели, когда вы все равно передаете их функциям.
Если вам действительно нужен указатель, измените свою вторую сигнатуру функции, чтобы показать, что:
int do_something(...,const float *writeArray,...){
Комментарии:
1. ах, это имеет смысл, я думаю, я слишком зависим от компилятора, чтобы кричать на меня за такие вещи…
2. @mugetsu — я настоятельно рекомендую узнать, что означают предупреждения компилятора, а не слепо следовать им.
3. @mugetsu: использование
%d
не является ошибкой. Он просто не достигает того, чего вы хотите. Есть разница.4. что касается странного способа, которым я имел дело с do_something(…, amp;data[0],…), это что-то в чужом коде. Я не слишком знаком с c, поэтому меня это тоже смутило, вероятно, причина, по которой я не думал, что неправильно печатаю свои данные. Я тоже не совсем уверен, в чем смысл :/
Ответ №2:
%d
указывает целое число со знаком. Используйте %f
вместо этого.
Ответ №3:
вы передаете значение с плавающей точкой, ваш printf пытается напечатать int