Функции стандартной библиотеки
Переменное число параметров функции.
Си допускает использование переменного числа параметров.
Специфика вызова:
1) признаком функции с переменным числом аргументов является многоточие в списке параметров;
2) встретив … компилятор прекращает контроль соответствующего типа;
3) у функции должен быть хотя бы один обязательный параметр;
4) функция с переменным числом параметров должна иметь способ определения их точного числа при каждом вызове;
int Func(int i; …);
int Func (int i, float z, …);
Признаком конца списка параметров является -1.
int Func(int i, …)
{
int count=0, sum=0;
int *p=&i;
while(*p!=-1)
{
count ++;
sum+=*p++;
}
return sum;
}
(printf, scanf).
int printf(const char *, …);
Функция printf предназначена для перевода указанных программистом в качестве необязательных параметров значений в строковое представление.
Функция определяет точное число необязательных параметров, подсчитывая количество символов % в единственном обязательном параметре.
%c – char
%d – int
%i – int
%e – exp // x=1,1e+0,02
%f – float
%g – float, но без лишних нулей
|
|
%o – восьмеричное представление числа
%p – значение адреса указателя в шестнадцатеричном виде
%s – массив строк
%u – преобразование аргумента к целому беззнаковому в десятичном виде
%x - преобразование аргумента к целому беззнаковому в шестнадцатеричном виде
int m = -1;
printf(“%x”,m);
%[+-n]s (строка символов)
%[+-n]f (дробное число в фиксированном формате)
%[+-n]e (количество цифр после десятичной точки)
%[+-n]i (d) (количество выводимых цифр)
%[+-n]g (максимальное количество цифр)
|
|
|
|
| ||||
Функция может возвращать:
-объект базового типа;
-объект пользовательского типа;
-указатель или ссылку;
bool func(); //базовый тип
main()
{
bool b= Func();
}
int &f()
{
static int n;
return n;
}
Проблемы при возвращении ссылки или указателя.
int *f1(int n)
{
int nN=n*5; //return &nN;
} //функция возвращает указатель на область памяти в стеке, которая после возвращения из функции может быть задействована компилятором для других целей
int &f2(int n)
{
int nN=n*5;
return nN;
} // функция возвращает указатель на локальную временную переменную
int main()
{
z=f2(1) +f2(2)+f2(3);
}
Нельзя возвращать адреса локальных объектов.
Возвращать можно:
1) указатель или ссылку на объект со статическим временем существования;
2) указатель на строковый литерал;
3) указатель на динамически созданный объект.