C. Тема 1. Раздел 6
.pdfint table[3][6] =
{
{1, 2, |
3, 4, |
5, |
6}, |
||
{7, |
8, 9, |
0, |
1, |
2}, |
|
{3, |
4, 5, |
6, |
7, |
8} |
};
char abcd[4] = { 'a', 'b', 'c', 'd' }; char abcd[5] = "abcd";
char abcd[] = "abcd";
Часть 3
Указатель (pointer) – переменная, диапазон значений которой состоит из адресов ячеек памяти и специального значения – нулевого адреса
Указатель «указывает» хранящимся внутри него адресом на ячейку памяти, к которой с его помощью можно обратиться
Значение нулевого адреса используется только для обозначения того, что указатель в данный момент не указывает ни на какую ячейку памяти
Объявление указателя
TypeName * identifier;
Пример
int * pi; float * pf, f;
double * ps, * pt;
& – определение адреса переменной
Пример
int a, *p; a=3;
p=&a; // Теперь p указывает на a
Пустой адрес обозначается: NULL
unsigned char *c = (unsigned char *)0x8001;
*c = 0x10;
Определим массив int a[10];
Определим указатель int *pa;
Присвоим указатель адресу первого элемента
массива
pa = &a[0];
Получим значение первого элемента массива через указатель
int x = *pa;
Получим указатель на следующий элемент массива
*(pa + 1)
Получим указатель на произвольный элемент
массива
*(pa + i) – это эквивалентно a[i]
Компилятор преобразует ссылку на массив в указатель на начало массива, следовательно:
Имя массива является указательным выражением
Записи pa = &a[0] и pa = a эквивалентны
Записи a[i], *(a + i), *(pa + i) и pa[i]
эквивалентны
Массив можно объявлять, как указатель, а потом пользоваться им, как массивом
Копирование переменной массива приводит к копировании только указателя
Данные массива не копируются
Две переменные массива могут обозначать одни и те же данные
int row[] = { 0, 1, 2, 3, 4 }; int *nextRow;
nextRow = row; nextRow[0] = 8;
Указатель по сути является обычной переменной, которую можно инкрементировать: pa++
Имя массива является константой, поэтому конструкции a = pa, a++ или p = &a неправильны