// создание и удаление динамического массива, изменение позиции указателя, доступ к элементам массива
// размер элемента массива
// использование пары new тип[]; и delete [] массив;
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| #include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{ // указатель на начало сделанного массива называется также, как имя массива
double* dyn_arr = new double[3]; // сделать динамический массив, указатель устанавливается в начало массива
dyn_arr[0] = 0.2; // инициализация элементов массива
dyn_arr[1] = 0.5;
dyn_arr[2] = 0.8;
cout << "size of array's element = " << sizeof(*dyn_arr) << endl; // размер элемента массива
cout << "pointer's address = " << dyn_arr << endl << endl; // вывод адреса начала массива
cout << "dyn_arr[1] = " << dyn_arr[1] << endl; // вывод первого элемента массива
dyn_arr++; // увеличение значения указателя на 1 позицию
cout << "pointer dyn_arr was just incremented\n";
cout << "pointer's address = " << dyn_arr << endl;
cout << "dyn_arr[0] = " << dyn_arr[0] << endl; // вывод нулевого элемента массива
cout << "dyn_arr[1] = " << dyn_arr[1] << endl; // вывод первого элемента массива
dyn_arr--; // уменьшение значения указателя на 1 позицию
cout << "pointer dyn_arr was just decremented\n";
cout << "pointer's address = " << dyn_arr << endl;
cout << "dyn_arr[0] = " << dyn_arr[0] << endl;
cout << "dyn_arr[1] = " << dyn_arr[1] << endl;
cout << "dyn_arr[2] = " << dyn_arr[2] << endl;
delete [] dyn_arr; // удаление динамического массива. Скобочки [] нужны, так как это был массив и при его создании словом new тоже были скобки[]
cout << "array was just deleted" << endl;
cout << "dyn_arr[0] = " << dyn_arr[0] << endl;
cout << "dyn_arr[1] = " << dyn_arr[1] << endl;
cout << "dyn_arr[2] = " << dyn_arr[2] << endl;
system("pause");
return 0;
} |
|
вывод адреса массива, char-указателя, int-указателя
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
| char ch_arr[100] = "the first value of ch_arr";
const char* const_ch_ptr = "const pointer's address"; // адрес строки помещается в указатель-на-чар, который константа, то есть не может быть изменён
char* ch_ptr = ch_arr;
int i = 1000;
int* int_ptr = &i; // поставить инт-указатель по адресу переменной типа инт
cout << &ch_arr << " : " << ch_arr << endl; // адрес массива чаров и содержимое, то есть строка, которой он инициализирован
cout << (int*)const_ch_ptr << " : " << const_ch_ptr << endl; // вывод адреса и строки по адресу константного указателя. Обычный указатель на чар студия не даёт приравнивать к константному указателю на чар
cout << (int*)ch_ptr << " : " << ch_ptr << endl; // вывод адреса и строки, расположенной по нему.
// при передачe в вывод чар-указателя выводится строка указываемая, поэтому для вывода адреса, на который указывает указатель,
// надо привести чар-укатель к типу инт-указателя
cout << endl;
cout << &i << " : " << i << endl; // адрес инта и инт
cout << int_ptr << " : " << *int_ptr << endl; // адрес (указатель) и значение, на которое он указывает |
|
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
| char ch_arr0[10] = "ABCD";
char ch_arr1[10] = "ABVG"; // память под этот массив может быть распределена где-то в неопределенном месте, не обязательно после или перед памятью под массив ch_arr0
char* ch_ptr = ch_arr0;
cout << &ch_arr0 << " : " << ch_arr0 << endl; // адрес массива чаров (то есть адреса нулевого элемента массива чаров) и содержимое, то есть строка, которой он инициализирован
cout << (int*)ch_ptr << " : " << ch_ptr << endl; // вывод адреса и строки, расположенной по нему.
// при передачe в вывод чар-указателя выводится строка указываемая, поэтому для вывода адреса, на который указывает указатель,
// надо привести чар-укатель к типу инт-указателя
cout << &ch_arr1 << " : " << ch_arr1 << endl;
cout << "sizeof : " << sizeof(ch_arr0) << endl; // сколько под массив выделено байтов
cout << "return from strlen(CHAR_ARRAY) : " << strlen(ch_arr0) << endl; // длинна строки записанной в массив чаров, нулевой-символ, указывающий на конец строки не считается
for (int i = 0 ; i < 10; i++) // вывод чар массива
cout << i << " : " << ch_arr0[i] << endl; |
|
|