
- •Массивы
- •Указатели
- •Указатели и массивы
- •Арифметические операции над указателями
- •1. Одномерный массив
- •2. Двумерный массив
- •3. Использование дополнительного указателя
- •Динамическое распределение памяти
- •2. Одномерный массив
- •Выделение и освобождение памяти в стиле c
- •2 Освобождение памяти
- •Утечка памяти
- •Исползование ключевого слова const при объявлении указателей
- •Указатели и строки
- •Инициализация строки
- •Ввод строк в консольном приложении
- •Функции для работы со строками
- •Основные манипуляции со строками
- •Некоторые замечания по работе со строками
Массивы
Массив – набор данных одного и того же типа, обращение к которым происходит с применением общего для всех имени
Определение массива тип name[размер]; int Arr_1[10]; int Arr_2[] = {1,2,3}; int Arr_3[3] = {1,2,3}; int Arr_4[3] = {1,2}; Частичное определение массива. Последний элемент получает значение 0.
const k=10; float A[k];
|
Доступ к элементам массива A[0]=1; A[i]=i*2;//i- индекс –целое число |
int myArr[3] Размещение массива в памяти
myArr[0] myArr[1] myArr[2]
|
Определение количества элементов массива
int arr[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
cout<<sizeof(arr)/sizeof(arr[0])<<endl;
Многомерные массивы
| |||||||||
Определение
|
| ||||||||
тип name[размер1][размер2]…[размерN]; |
| ||||||||
int MyArr[3][3] = {0,1,2,3,4,5,6,7,8}; |
эквивалентны | ||||||||
int MyArr[3][3] = {{0,1,2}, {3, 4, 5} {6, 7, 8}}; | |||||||||
int MyArr[3][3] = {{0,1}, {3, 4, 5} {6, 7}}; |
частичное определение | ||||||||
int myArr[2][3] Размещение массива в памяти
myArr[] [0] myArr[] [1] myArr [] [2]
|
Пример1 -Поиск минимального элемента в массиве
#define k 5 //количество элементов в массиве
// директива #define определяет имя макроса.
// Здесь к – макроимя; 5- макроподстановка
void main()
{
int a[k]; // массив
int min; // номер минимального элемента
int i; // индекс массива
for (i=0;i<k; i++) cin>>a[i]; //scanf("%d",&a[i]);
min=0; // считаем, что первый элемент массива минимальный
for (i=1;i<k;i++)
if (a[i]<a[min]) min=i;// назначаем новый номер минимального //элемента
printf("Min element is a[%d]=%d ",min,a[min]);
getch();
}
Указатели
Указатель (pointer) – переменная, содержащая адрес другой переменной тип *<имя переменной-указателя> С помощью указателя осуществляется косвенная адресация (indirection) |
Назначение указателей
|
Пример1
#include <stdio.h>
#include <conio.h>
int main()
{
float x=10.1,y;
float *pf=NULL; // задание указателя
pf=&x; // адресу pf присваивается адрес x; &-операция адресации
y=*pf; //присвоить содержимое адреса pf переменной y ;
// * - оператор разыменования или косвенной адресации
printf("x=%f y=%f\n",x,y); //x=10.1 y=10.1
printf("pf=%p\n",pf);//печать адреса pf в шестнадцатеричном
// формате
pf++; // увеличить адрес на 4 байта, т.к. длина float равна 4;
*pf=0;
printf("pf=%p\n",pf); //печать адреса pf
printf("x=%f y=%f\n",x,y); // x=10.1 y=10.1
printf("*pf=%f\n" ,*pf); // содержимое адреса pf =0
y=1+*pf*y;
printf("x=%f y=%f\n",x,y);//x=10.1 y=1, т.к. y=1+0*10.1
getch();
return 0;
}
Пример 2
#include <stdio.h>
#include <conio.h>
void main()
{
int *p, num; // p – указатель, num - целое
p=#
*p=100;
printf("%d=",num); // По адресу p число 100
(*p)++; // содержимое адреса p увеличить на 1
printf("%d=",num); // По адресу p число 101
(*p)--; // содержимое адреса p уменьшить на 1
printf("%d=",num); // По адресу p число 100
printf("%p=",p); //адрес p=0012FF84
p++; // увеличение адреса на 4 бaйта
printf("%p=",p); //адрес p=0012FF88
getch();
}