Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в программирование на С.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
930.82 Кб
Скачать

3.3 Указатели

Указатель – это особый вид переменной, который хранит адрес элемента памяти, где может быть записано значение другой переменной.

Определение указателя:

тип_данных *имя_указателя;

тип_данных – это тип на который будет указывать указатель;

* - определяет тип указатель;

имя_указателя – это имя переменной, которая хранит адрес переменной, на которую будет указывать указатель;

*имя_указателя – это содержание адреса, на который указывает указатель.

Указатель можно представить в виде стрелки.

Что распечатает данная программа?

#include<stdio.h>

Void main()

{

int x=67,*p;//х - это переменная целого типа, а p указатель на целый тип

p=&x;// присвоение адреса переменной х переменной p

printf("\n%d\n",*p);

*p=*p+3;

printf("%d\n",x);

}

Операция & является адрес переменной в памяти и может использоваться практически со всеми типами данных, кроме констант и битовых полей. Указатель часто используется для обмена данных с функциями. В то время, как в функцию можно передавать столько аргументов сколько требуется, а с помощью оператора return возвращается только одно значение. Когда возникает необходимость вернуть более, чем одного значения с помощью одной функции используются указатели.

Пример:

Функция, которая получает 2 целых числа и возвращает сумму, произведение, разность и деление данных чисел.

#include<stdio.h>

Void fff(int,int,int*,int*,int*,double*);

Void main()

{

int x,y,sum,pr,raz;

double del;

printf("Введите 2 целых числа: ");

scanf("%d%d",&x,&y);

fff(x,y,&sum,&pr,&raz,&del);

printf("%d+%d=%d\n",x,y,sum);

printf("%d-%d=%d\n",x,y,raz);

printf("%d*%d=%d\n",x,y,pr);

printf("%d/%d=%.2lf\n",x,y,del);

}

Void fff(int a,int b,int*p1,int*p2,int*p3,double*p4)

{

*p1=a+b;

*p2=a*b;

*p3=a-b;

*p4=(double)a/b;

}

Задачи:

  1. В main() объявляем 2 переменный, потом вызываем функцию, где вызываем функцию scanf() и записывает в эти переменные числа, которые распечатываются в main().

  2. Функция которая получает только 3 значения из main() и возвращает в первую переменную выражение a+b+c –(a*a); во вторую a*a +b*b-c*c, а в третью a*b*c, т.е если начальные значения a=3, b=2,c=1, то теперь в a храниться -3, b храниться 14, а в c 6.

  3. Функция получает два числа и меняет местами значения переменны.

    1. Генерация случайных чисел.

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

Void main()

{

int n;

for(int i=1;i<=120;i++)

{

n=rand();

printf("n%d=%d\n",i,n);

}

}

Функция rand() генерирует числа в диапазоне от 0 до 32767, т.е. до положительного максимального двухбайтного целого значения и прототип функции rand и функции srand находится в <stdlib.h>. Чтобы регулировать ширину диапазона используется операция вычисления остатка %, n = a + rand()%(b-a+1), т.е. [a,b],

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

Void main()

{

int n;

for(int i=1;i<=20;i++)

{

n=1+rand()%10;

printf("n%d=%d\n",i,n);

}

}

для того чтобы при новом вызове программы числа были разные необходимо включить функцию srand (unsingned int), которая получает в качестве аргумента число в пределах от 0 до 65535, если unsingned int в 2-х байтах и от 0 до 4294967295 если в 4-х байтах, и для того чтобы каждый раз не задавать различные числа передаем функцию time(NULL); прототип, которой находится в <time.h>

3.5 Некоторые функции из <time.h>

time_t time(time_t*timer); Функция time определяет текущее календарное время. Функция time возвращает наилучшее приближение текущего календарного времени, обеспечиваемое реализацией. Если календарное время не доступно, то возвращаемое значение (time_t, которое является арифметическим типом, используемый для предоставления времени) -1. Если timer не является нулевым указателем, то возвращаемое значение помещается в объект, на который ссылается указатель.

#include<stdio.h>

#include<time.h>

#include<stdlib.h>