Пример взаимодействия функций с использованием глобальных переменных
Пример взаимодействия функций без использования глобальных переменных
Результат работы программы
Пример
Результат работы программы
Пример программы
Глобальные и локальные объекты
Результат работы программы
Пример
Результат работы программы
Пример
Пример программы
Общая форма записи
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 будут случайно изменены в вызываемой функции.