Страницы

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

понедельник, 6 января 2020 г.

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

#cpp


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

Что будет в итоге, если я напишу так?

HANDLE * VariableHandle;
DWORD * VariableDword;


или так?

HANDLE VariableHandle;
DWORD VariableDword;


Пример из исходных кодов других программ.

Почему так? 

int chSizeOfArray(char *chArray);
int iSizeOfArray(int *iArray);


А не так?

int chSizeOfArray(char chArray);
int iSizeOfArray(int iArray);

    


Ответы

Ответ 1



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

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

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