
- •Лабораторная работа № 5 Массивы и указатели
- •1 Понятие и описание массивов
- •2 Одномерные массивы Пример 1 Ввод элементов одномерного массива
- •4 Символьные массивы
- •Пример 3 Описание символьного массива
- •Пример 4 Сравнение строк
- •5 Указатели и операции над указателями
- •Пример 5 Описание указателей
- •Пример 6 Операции над указателями
- •Пример 7 Сравнение указателей
- •6 Связь между массивом и указателем
Пример 4 Сравнение строк
Напишем программу, запрашивающую пароль.
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
using namespace System;
int main(array<System::String ^> ^args)
{
char name[50];
char vvod[10], passw[]="d45gtr";
printf("Введите имя\n");
gets(name);
printf("Введите, %s, пароль\n", name);
gets(vvod);
if (strstr(vvod,passw))
printf ("Пароль принят");
else printf("Пароль не принят");
getch();
return 0;
}
В программе используется функция gets()– функция ввода строки и функция strstr(vvod,passw), которая сравнивает эталонный пароль d45gtr, содержащийся в массиве passw[] с паролем, введенным пользователем.
Задание 6
Внесите в исходный код программы 4 определение длины введенного пароля. Измените программу так, чтобы неверный ввод пароля мог быть выполнен не более трех раз и заканчивался сообщением "Превышено допустимое число ввода".
Задание 9
Проанализируйте коды следующих программ и определите результаты их выполнения.
Программа 1
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
using namespace System;
int main(array<System::String ^> ^args)
{
char a[25],b[5];
gets(a);
gets(b);
printf("%d\n",strcmp("a","a"));
printf("%d\n",strcmp("a","b"));
printf("%d\n",strcmp("b","a"));
getch();
return 0;
}
Программа 2
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
using namespace System;
int main(array<System::String ^> ^args)
{
char a[25],b[5];
gets(a);
gets(b);
strcat(a,b);
printf ("new string a=");
puts(a);
printf("string b=");
puts(b);
getch();
return 0;
}
5 Указатели и операции над указателями
Для доступа к данным процессор использует адреса. И когда компилятор обрабатывает оператор определения переменной, например,
int p1=10;
он выделяет память в соответствии с типом (int) и инициализирует ее указанным значением (10). Все обращения в программе к переменной по ее имени (p1) заменяются компилятором на адрес области памяти, в которой хранится значение переменной.
Для хранения адресов областей памяти предназначены указатели.
Формат объявления указателя на объект:
Тип *имя;
Пример 5 Описание указателей
int *p1;
Переменная p1 представляет собой указатель на тип int.
Для работы с указателями в С используются две операции: * и &.
В результате выполнения операции & определяется адрес ячейки памяти, которая соответствует переменной. Если b – имя переменной, то &b – ее адрес.
Например, если задать указателю имя a, то оператор
а=&b;
присваивает адрес b переменной а. Различие между двумя формами записи: а и &b, заключается в том, что а – это переменная, в то время как &b – константа. Предположим, что переменная b хранится в ячейке памяти под номером 2000, а ее значение равно 37. Тогда переменной а будет присвоено значение 2000.
Вторая операция над указателями * – операция косвенной адресации, выполняет действие, обратное по отношению к &.
Оператор а=*b; может быть прочитан так: «а получает значение переменной, расположенной по адресу b».