Когда непросто определить условие выхода из цикла с помощью указателя, то в заголовке оператора цикла можно использовать как переменную-указатель, так и индекс.
void MySum4 (int *ar, unsigned size, int *uS)
{ int *p=ar; unsigned i;
for (*uS=0, i=0; i<size; p++, i++) *uS+=*p;
}
В этом варианте надо не забыть изменить значение как указателя, который будет использоваться для доступа к элементу массива, так и значение индекса, используемое для выхода из цикла.
Заголовок функции и их вызов не зависят от того, какой вариант использовали при организации цикла. Разные виды параметра функции для результата приведены только с целью повторения. Для проверки рассмотренных выше вариантов добавим функции для ввода и вывода массива.
void MyInp (int *ar, unsigned size)
{ int *p=ar;
for (int i=0; i<size; i++) *(p+i)=random(20)-10;
}
void MyOut (int *ar, unsigned size)
{ int *q=ar+size-1; cout<<endl;
for (; ar<=q;ar++) cout<<(*ar)<< " ";
cout<<endl;
}
int main()
{ // a) Работа со статическим массивом
const n=5; int a[n] ={1,2,3,4,5}, S2, S3;
cout<<MySum0(a,n)<<" "<<MySum1(a, n)<< endl;
MySum2(a,n, S2); cout<<S2<<" ";
MySum3(a,n, &S3); cout<<S3<<" ";
|
|
int *S4= new int;
MySum4(a,n, S4); cout<<*S4<<" "<< endl;
// b) Использование функций для динамического массива
randomize();
unsigned N; N=random(10)+2;
int *aD=new int[N];
MyInp(aD, N); MyOut(aD,N);
cout<<MySum0(aD,N)<<" "<<MySum1(aD, N)<< endl;
MySum2(aD,N, S2); cout<<S2<<" ";
MySum3(aD,N, &S3); cout<<S3<<" ";
MySum4(aD,N, S4); cout<<*S4<<" ";
getch(); return 0;
}
Обратите внимание на вызов функций MySum3 и MySum4. Особенности их вызова по сравнению с MySum2 связаны не с тем, как организован цикл в этих функциях, а с тем, что одно целочисленное значение возвращается из функции с помощью указателя, а не с помощью переменной ссылочного типа. Для лучшего понимания этих вариантов повторите § 3 главы 1.
§5. Строки.
В современных компьютерных системах, в том числе и в C++, большое внимание, как и в старых языках программирования, уделяется работе со строками. Это связано с тем, что компьютеры решают не только задачи вычислительного характера. Большое внимание уделяется также обработке и анализу текстовой информации.