double arrow

Значение формальных параметров функции по умолчанию

Формальный параметр может иметь значение по умолчанию. Все параметры, стоящие справа от него тоже должны иметь значения по умолчанию. Эти значения передаются в функцию, если при вызове данные параметры не указаны.

#include <stdio.h>

void Name1 (float x, int y, char z='b') {

printf("x = %0.1f y = %d, z = %d \n", x,y, (int)z);

}

void Name2 (float x, int y=16, char z='a') {

printf("x = %0.1f y = %d, z = %d \n", x,y, (int)z);

}

void Name3 (float x=1.3, int y=4, char z='c') {

printf("x = %0.1f y = %d, z = %d \n", x,y, (int)z);

}

void main(void) {

Name1(1.0,2);

Name2(100.0);

Name3();

}

Перегрузка функций

Имена функций могут быть перегружены в пределах одной области видимости. Компилятор отличает одну функцию от другой по сигнатуре. Сигнатура задается числом, порядком следования и типами ее параметров.

#include <stdio.h>

#include <string.h>

int Name (int first) {

return first*first;

}

int Name (unsigned first) {

return first*first;

}

char Name (char first) {

return first*first;

}

int Name (int first,char *second) {

return first*strlen(second);

}

float Name (float r) {

return r*r;

}

double Name (double r) {

return r*r;

}

void main(void) {

printf("%d\n", noName(4));

printf("%d\n", noName((unsigned)4));

printf("%c\n", noName('c'));

printf("%d\n", noName(4,"cлово"));

printf("%0.2f\n", noName((float)1.2));

printf("%0.2lf\n", noName((double)1.2));

}

КЛАССЫ ПАМЯТИ И ОБЛАСТЬ ДЕЙСТВИЯ

До сих пор мы имели дело с локальными переменными, которые доступны только в одной функции. В данном случае переменные a, b в main() и myfunc() являются разными переменными.

void myfunc(int, int);

void main (void){

int a=5, b=10;

printf ("%d %d\n", a, b);

myfun (a, b);

printf ("%d %d\n", a, b);

}

void myfun (int a, int b){

a++; b++;

printf ("%d %d\n", a, b);

}

Каждая существует только в своей функции и доступна только в ней. Физически это разные ячейки памяти. Такие переменные называются "локальными". Но иногда требуются переменные доступные из любой функции и даже модуля программы. Такие переменные называются "глобальными".




Каждая переменная в Си принадлежит некоторому классу памяти. Всего существует 5 классов памяти. Для их описания используются ключевые слова:

extern - внешний,

auto - автоматический,

static - статический

register - регистровые.






Сейчас читают про: