русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Void main (void)

{clrscr();int k=35; a=10;b=12; int c= f1(k); printf("%d",c); }//с и k– локальные в main

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

Программе main также могут быть переданы параметры при запуске. В этом случае текст программы может выглядеть следующим образом:

#include <stdio.h>

void main(int argc, char *argv[])

//здесь в argc – количество элементов в строке запуска программы;

{char *s; s=argv[0]; // argv[] – массив ссылок на элементы этой строки

printf("name programm=\"%s\"\n",s); //первый элемент строки запуска

if(argc > 1) //конструкция \” используется для ввода в текст символа кавычки «“»

{s=argv[1]; printf("parametr programm=\"%s\"\n",s);}//второй элемент строки запуска

}

Если создать загрузочный модуль такой программы, например с именем f1.exe, в каталоге D:\BORLANDC\MY_WORK и запустить его из этого каталога командой, например: f1 77, то в результате получим вывод на экран двух строк:

name programm=” D:\BORLANDC\MY_WORK \F1.EXE”

parametr programm=”77”

В языке С аргументы функции передаются по значению, т.е. вызванная функция получает в именах формальных параметров временную копию каждого аргумента, а не его адрес. Это означает, что в самой функции не может изменяться значение самого оригинального аргумента в вызвавшей ее программе. Ниже будет показа­но, как убрать это ограничение. Если же в качестве аргумента функ­ции используется имя массива, то передается начало массива (адрес начала массива), а сами элементы не копируются. Функция может изменять элементы массива, сдвигаясь (индексированием) от его начала. Рассмотрим, как соответствуют друг другу параметры в вызове и в списке функции. Пусть в вызывающей программе вызов функции реализован следующим образом:

int a,b=73, c=40; а = fun(b,с);

Здесь b и о - аргументы, значения которых передаются в вызываемую подпрограмму. Если описание вызываемой функции начинается так:

void fun(int b,int c);

то имена передаваемых аргументов в вызове и в программе fun будут одинаковыми. Если же описание функции начинается, например, строкой void fun(int i,int j); , то вместо имени b в вызвавшей функции для того же аргумента в функ­ции fun будет использовано имя i, а вместо с – j .

Пусть обращение к функции имеет вид

а = fun(&b,&c);

Здесь подпрограмме передаются адреса переменных b и о. Поэтому про­тотип (заголовок вызываемой функции) должен быть, например, таким:

void fun(int *k,int *c);

Теперь k получает адрес передаваемой переменной b, а с - адрес пе­редаваемой переменной с. В результате в вызвавшей программе с - это переменная целого типа, а в вызванной программе с - это указатель на переменную целого типа. Если в вызове записаны те же имена, что и в списке параметров, но они записаны в другом порядке, то все равно устанавливается соответствие между i-м именем в списке и i-м именем в вызове.

Выше уже указывалось, что переменные передаются функции по значению, поэтому нет прямого способа в вызванной функции изменить некоторую переменную в вызвавшей функции. Однако это легко сделать, если передавать в функцию не переменные, а их адреса. Пример:

#include <stdio.h>

void f1 (int * a,int b, int * c1)//принимаемые аргументы: a – по адресу, b – по значению,

{*c1=*a+b; return;} //c1- по адресу. Теперь указатель с1 ссылается на с

void main (void) // и значения с=*с1;

{int c, a=17, b=16; f1(&a,b,&c);//передаваемые параметры: a – по адресу; b – по значентию

printf("%d",c); } // с – по адресу. Результат вычисления получаем в с.

Рассмотрим теперь, как функции можно передать массив в виде па­раметра. Здесь возможны три варианта. Причем в прототипе и теле записи могут комбинироваться из этих вариантов.

int mn[100] – объявлен массив. В функцию передается (прототип)

int mn []

int *mn

1. Параметр задается как массив (например: int [100]).

2. Параметр задается как массив без указания его размерности (например: int m[ ]).

3. Параметр задается как указатель (например: int *m, прототип int f1(int *mn).

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

#include <stdio.h>

void f1 (int x[20],int k)

{int i; for (i=0; i<k; i++) x[i]=i;}

#define k 5

Просмотров: 608


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.