КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Передача строк в качестве параметров функций
Передача одномерных массивов как параметров функции Функции и массивы Локальные и глобальные переменные Переменные, которые используются внутри данной функции, называются локальными. Память для них выделяется в стеке, поэтому после окончания работы функции они удаляются из памяти. Нельзя возвращать указатель на локальную переменную, т. к. память, выделенная такой переменной будет освобождаться. int*f() { int a; .... return&a;// НЕВЕРНО } Глобальные переменные – это переменные, описанные вне функций. Они видны во всех функциях, где нет локальных переменных с такими именами. Пример: int a,b;//глобальные переменные void change() { int r;//локальная переменная r=a;a=b;b=r; } void main() { cin>>a,b; change(); cout<<”a=”<<a<<”b=”<<b; } Глобальные переменные также можно использовать для передачи данных между функциями, но этого не рекомендуется делать, т. к. это затрудняет отладку программы и препятствует помещению функций в библиотеки. Нужно стремиться к тому, чтобы функции были максимально независимы, а их интерфейс полностью определялся прототипом функции. При использовании массива как параметра функции, в функцию передается указатель на его первый элемент, т. е. массив всегда передается по адресу. При этом теряется информация о количестве элементов в массиве, поэтому размерность массива следует передавать как отдельный параметр. Так как в функцию передается указатель на начало массива (передача по адресу), то массив может быть изменен за счет операторов тела функции. Пример1: Удалить из массива все четные элементы #include <iostream.h> #include <stdlib.h>
int form(int a[100]) { int n; cout<<"\nEnter n"; cin>>n;
for(int i=0;i<n;i++) a[i]=rand()%100; return n; } void print(int a[100],int n) { for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<"\n"; }
void Dell(int a[100],int&n) { int j=0,i,b[100]; for(i=0;i<n;i++) if(a[i]%2!=0) { b[j]=a[i];j++; } n=j; for(i=0;i<n;i++)a[i]=b[i];
}
void main() { int a[100]; int n; n=form(a); print(a,n); Dell(a,n); print(a,n); } Пример 2 Удалить из массива все элементы, совпадающие с первым элементом, используя динамическое выделение памяти. #include <iostream.h> #include <stdlib.h> int* form(int&n) {
cout<<"\nEnter n"; cin>>n; int*a=new int[n];//указатель на динамическую область памяти for(int i=0;i<n;i++) a[i]=rand()%100; return a; } void print(int*a,int n) { for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<"\n"; }
int*Dell(int *a,int&n) { int k,j,i; for(k=0,i=0;i<n;i++) if(a[i]!=a[0])k++; int*b; b=new int [k]; for(j=0,i=0;i<n;i++) if(a[i]!=a[0]) { b[j]=a[i];j++; } n=k; return b; }
void main() { int *a; int n; a=form(n); print(a,n); a=Dell(a,n); print(a,n); } Строки при передаче в функции могут передаваться как одномерные массивы типа char или как указатели типа char*. В отличие от обычных массивов в функции не указывается длина строки, т. к. в конце строки есть признак конца строки /0. Пример: Функция поиска заданного символа в строке int find(char *s,char c) { for (int I=0;I<strlen(s);I++) if(s[I]==c) return I; return –1 } С помощью этой функции подсчитаем количество гласных букв в строке. void main() { char s[255]; gets(s) char gl=”aouiey”; for(int I=0,k=0;I<strlen(gl);I++) if(find(s,gl[I])>0)k++; printf(“%d”,k); }
Дата добавления: 2014-01-04; Просмотров: 462; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |