Вызов функции с разными типами данных - PullRequest
1 голос
/ 14 июля 2011

Не является ли строка 7 этой программы "pay = prt (pay);" должен выдать ошибку компиляции или времени выполнения, потому что он передает int в параметр, для которого требуется double? Я скомпилировал его с помощью dev-c ++ и запустил программу с двумя строками вывода. Пожалуйста, объясните, спасибо.

#include <stdio.h>
int prt(double b);
main ()
{
    int pay = 3;
    double tax = 2.2;
    pay = prt(pay);
    prt(tax);
}     

int prt(double b)
{
    b *= 2;
    printf("%.2lf\n", b);   
}

Ответы [ 3 ]

6 голосов
/ 14 июля 2011

C автоматически преобразует различные числовые типы в этой ситуации.

См. Неявное преобразование типов в C-подобных языках .

3 голосов
/ 14 июля 2011

Вы объявили функцию как int, но никогда ничего не возвращали и не дали main тип возвращаемого значения.Я бы сказал, что любой компилятор вполне может отклонить ваш код.

0 голосов
/ 15 июля 2011

тип данных, имеющий меньший или равный размер, может быть преобразован в более высокий.

в обратном случае: Float to int вызывает усечение, то есть удаление дробной части.double to float вызывает округление цифры long int до int, вызывая сброс избыточных битов более высокого порядка.

...