Страницы

Поиск по вопросам

четверг, 14 февраля 2019 г.

Как работают указатели?

Как работают указатели?
Что будет в итоге, если я напишу так?
HANDLE * VariableHandle; DWORD * VariableDword;
или так?
HANDLE VariableHandle; DWORD VariableDword;
Пример из исходных кодов других программ.
Почему так?
int chSizeOfArray(char *chArray); int iSizeOfArray(int *iArray);
А не так?
int chSizeOfArray(char chArray); int iSizeOfArray(int iArray);


Ответ

Когда вы пишете HANDLE * VariableHandle;, вы объявляете, что в переменной VariableHandle будет содержаться указатель на HANDLE. А объявление HANDLE VariableHandle; означает, что в переменной VariableHandle будет содержаться сам HANDLE
В языках типа C указатель используется во многих смыслах. Один из них — это массив элементов. Функции int f1(char *chArray); и int f2(char ch); обе возможны, но при этом f1 принимает в качестве аргумента массив char'ов (или указатель на один char, это уж как в документации написано), а f2 — один char

Как верно подсказывает @ixSci, лучше всего думать про указатель как про адрес объекта. Если представить себе всю память как огромный массив байт, адрес — это просто номер начального байта, занимаемого данными, в этом массиве. (Это несколько упрощённая картина, но для начала то, что нужно.)

Комментариев нет:

Отправить комментарий