Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Указатель - это адрес памяти, распределяемой для размещения идентификатора (в качестве идентификатора может выступать имя переменной, массива, структуры, строкового литерала).





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

При объявлении переменной типа указатель, необходимо определить тип объекта данных, адрес которых будет содержать переменная, и имя указателя с предшествующей звездочкой (или группой звездочек). Формат объявления указателя:

Имя_типа * имя_указателя;

Имя_типа задает тип объекта и может быть любого основного типа.

Пример:

char *z;

int *k, *i;

float *f;

*z обозначает объкт типа char, на который указывает z. Оператор *z=’ ‘; засылает символ «пробел» в тот участое памяти, адрес которого определяет указатель z.

С помощью операции обращения по адресу можно записывать значения:

*xptr = 10; // записать число 10 по адресу xptr. После выполнения этого оператора значение переменной x станет равным 10, поскольку xptr указывает на переменную x.

Для вывода значений указателей в форматной строке printf() используется спецификатор %p.

Две переменные типа указатель нельзя суммировать, однако к указателю можно прибавить целую величину. Правила прибавления здесь такие же, как и в предыдущей операции. Так, после команды

xptr+=3; (xptr типа int)

значение указателя изменилось с FFF2 на FFFE.

В отличие от операции сложения, операция вычитания применима не только к указателю и целой величине, но и к двум указателям одного типа. Разность указателей показывает, сколько объектов соответствующего типа может поместиться между указанными адресами.

В языке С определена символическая константа NULL для обозначения нулевого значения указателя.

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

Запишем двумя способами программу суммирования элементов этого массива:

 

1.

long array[100];

long sum = 0;

for (int i = 0; i < 100; i++)

sum += array[i];

 

2.

long array[100];

long sum = 0;

for (long* ptr = &array[0]; ptr < &array[99] + 1; ptr++)

sum += *ptr;

 

 

Упоминание имени массива без индексов преобразуется в адрес его первого элемента.

for (long* ptr = array; ptr < &array[99] + 1; ptr++)

sum += *ptr;

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

#include

#include

void main()

{

void positive(int *m);

int k=-3;

positive(&k);

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

getch();

}

void positive(int *m)

{

if (*m < 0)

*m=-*m;

}

Если в качестве параметра функции используется обозначение массива, то на самом деле внутрь функции передаётся только адрес начала массива, а значит внутри функции можно изменять значения элементов такого массива.

Если мы используем массив b в качестве параметра функции, то следующие конструкции идентичны:

float b[]; и float *b;

Пример. Рассмотрим функцию, возводящую в квадрат значения элементов одномерного массива.

#include

#include

void quart(int x[], int n);

 

void main()

{

int z[]={1,2,3,4};

int j;

quart (z, 4);

for (j=0;j < 4; j++)

printf("\n %d",z[j]);

getch();

}

void quart(int x[],int n)

{

int i;

for (i=0; i < n; i++)

x[i]*=x[i];

}

Заголовок функции может быть следующим:

void quart(int *x, int n);

А обращение к элементам массива внутри функции - *(x+i).

Двумерный масив размерности можно представить как одномерный масив одномерных масивов. Выражение a[i][j] переводится компилятором в эквивалентное выражение *(*(a+i)+j).

Варіанти індивідуальних завдань:

1. Визначити найбiльший елемент серед найменших елементiв кожного рядка матрицi.
2. Для кожного стовпця матрицi знайти i надрукувати мiнiмальний елемент.
3. Для кожного рядка матрицi знайти i надрукувати номери стовпцiв, що вмiщують вiд`ємнi елементи.
4. Для кожного рядка матрицi знайти i надрукувати суму значень елементiв, що перевищують число Z.
5. Для кожного стовпця матрицi знайти i надрукувати суму значень вiд`ємних елементiв.
6. Для кожного рядка матрицi знайти i надрукувати кiлькiсть додатних елементiв.
7. Визначити i надрукувати найменшiй елемент матрицi та його iндекси.
8. Для кожного стовпця матрицi знайти i надрукувати номер рядкiв, що вмiщують вiд`ємнi елементи.
9. Для кожного стовпця матрицi знайти i надрукувати суму значень додатних елементiв.
10. Для кожного рядка матрицi знайти i надрукувати максимальний елемент.
11. Визначити i надрукувати кiлькiсть додатних елементiв матрицi.
12. Пiдрахувати кiлькiсть вiд`ємних елементiв, розмiщених нижче головної дiагоналi в квадратнiй матрицi.
13. Для кожного рядка матрицi знайти i роздрукувати суму значень вiд’ємних елементiв.
14. Для кожного стовпця матрицi знайти i надрукувати кiлькiсть елементiв, що по величинi не перевищує число Z.
15. Для кожного рядка матрицi знайти i надрукувати суму значень елементiв, розмiщених в стовпцях з парними номерами.
16. Визначити i надрукувати кiлькiсть вiд’ємних елементiв в кожному стовпцi матрицi.
17. Знайти максимальний по модулю елемент матрицi. Надрукувати його значення та iндекси.
18. Знайти i надрукувати суму значень додатних елементiв матрицi.
19. Для кожного рядка матрицi визначити i надрукувати кiлькiсть елементiв, значення яких перевищує число Z.
20. Для кожного стовпця матрицi визначити i надрукувати суму значень елементiв, розмiщених в рядках з непарними номерами.
21. Для кожного рядка матрицi надрукувати номери стовпцiв, що вмiщують додатнi елементи.
22. Пронормувати матрицю, подiливши елементи кожного рядка на найбiльший по модулю його елемент.
23. Визначити i надрукувати кiлькiсть додатнiх елементiв кожного стовпця матрицi.
24. Визначити мiнiмальний елемент кожного рядка матрицi. Надрукувати його значення та iндекси.
25. Знайти суму додатнiх елементiв квадратної матрицi, що розмiщенi над її головною дiагоналлю.
26. Знайти суму додатних елементiв квадратної матрицi, що розмiщенi на її головнiй та стороннiй дiагоналях.
27. Для кожного стовпця матрицi знайти i надрукувати кiлькiсть елементiв, значення яких не перевищує числа Z.
28. Знайти i надрукувати добуток значень вiд`ємних елементiв матрицi.
29. Для кожного рядка матрицi знайти i надрукувати суму значень елементiв, що розмiщенi в стовпцях з непарними номерами.
30. Знайти i надрукувати суму значень вiд’ємних елементiв матрицi.

 







Дата добавления: 2015-09-19; просмотров: 336. Нарушение авторских прав; Мы поможем в написании вашей работы!




Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


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


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

Определение трудоемкости работ и затрат машинного времени На основании ведомости объемов работ по объекту и норм времени ГЭСН составляется ведомость подсчёта трудоёмкости, затрат машинного времени, потребности в конструкциях, изделиях и материалах (табл...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

Studopedia.info - Студопедия - 2014-2025 год . (0.008 сек.) русская версия | украинская версия