Пример взаимодействия функций с использованием глобальных переменных
Пример взаимодействия функций без использования глобальных переменных
Результат работы программы
Пример
Результат работы программы
Пример программы
Глобальные и локальные объекты
Результат работы программы
Пример
Результат работы программы
Пример
Пример программы
Общая форма записи
sizeof(объект)
#include <stdio.h> | |||||||||
#define pi | 3.14159625 | ||||||||
main() { int x; | |||||||||
printf( | "\n Размер | памяти | под | целое | число | с | Id | байт.", | |
sizeof( | int)); | ||||||||
printf( | "\n Размер | памяти | под | тип | double | %d | байт.", |
sizeof(double)); | ||
printf("\n Размер | памяти под переменную %d байт.", | |
sizeof(x)); | ||
printf("\n Размер | памяти под константу pi %d байт.", | |
} | sizeof(pi)); |
Операция «запятая»( « , » ) предназначена для связывания между собой выражений. Список, разделенный запятой, трактуется как единое выражение и вычисляется слева направо.
main() | |
{ | |
int x=3, у; | |
у=3, 4*х; | |
printf ("\n Значение y=%d.", | у); |
} |
Значение у=12
main()
{
int i, b;
for (i=0, b=l; i <= 5;i++
{
b=b+i;
printf("\n Значение b=%d.",b);
Значение b=l
Значение b=2
Значение b=3
Значение | Ь= | = 4. |
Значение | Ь= | =5. |
Значение | Ь= | = 6. |
Глобальныминазываются объекты, объявление которых дано вне функции. Они доступны (видимы) во всём файле, в котором они объявлены, а также во всех внешних файлах (модулях).
Локальныминазываются объекты, объявление которых дано внутри функции. Эти объекты доступны только внутри той функции, в которой они объявлены.
В Си существует понятие времени жизни объекта, которое бывает глобальным или локальным. Объект с глобальным временем жизни характеризуется тем, что в течение всего периода выполнения программы с ним связана определённая ячейка оперативной памяти и какое-то значение. Объекту с локальным временем жизни выделяется новая ячейка оперативной памяти при каждом вхождении в блок, в котором объявлен этот объект. Когда выполнение блока завершается, память, выделенная под локальный объект, освобождается, и объект теряет своё значение.
#include <stdio.h> void autofunc(void)
{
int k=l;
printf("\n k = %u", k); k=k+l; }
main()
{
int i;
for(i = 0; i<=5; i++) autofunc();
}
к= | |
к= | |
к= | |
к= | |
к= | |
к= |
Если в примере объявить переменную к как глобальную, результат работы программы будет иным.
#include <stdio.h> | ||
int k=l; | ||
void autofunc(void) | ||
{ | ||
printf("\n k = %u' | ', k); | |
k=k+l; | ||
} | ||
main() | ||
{ | int i; | |
for (i = 0; i<=5; | i + +) | |
autofunc (); | ||
} |
k = | |
k = | |
k = | |
k = | |
k = |
к = б
Замечание: глобальные переменные нужны для того, чтобы организовывать обмен информацией между функциями.
#include <stdio.h> | |
int func(int xl, int x2) | |
{ | |
int y; | |
y=xl+x2; | |
return(y); | |
} | |
main() | |
{ | |
int xl, x2; | |
c=func( xl, x2); | |
/* вызов функции | */ |
} |
#include <stdio.h> | ||
int xl, x2; | ||
int func(void) | ||
{ | ||
y=xl+x2; | ||
return(y); | ||
} | ||
main() | ||
{ | ||
xl=...; /* | изменение значений | */ |
Xz, •••/' / | глобальных */ | |
/* | переменных */ |
... | |||
c=func() ; | /* | вызов функции */ | |
} |
Программа имеет недостаток: функция func не имеет формальных параметров, обмен информацией между функциями организован через глобальные переменные х\, х2. Существует опасность, что переменные х\, х2 будут случайно изменены в вызываемой функции.