Игнорируйте этот ответ, пожалуйста.
Если вы не знаете, как использовать указатели, узнайте , как их использовать. Простой.
Как вы уже сказали, указатели позволяют передавать в функцию более одной переменной через указатель, как вы правильно заметили. Другое использование указателей - обращение к массивам данных, которые вы можете использовать, используя арифметику указателей. Наконец, указатели позволяют динамически распределять память. Поэтому совет не использовать указатели серьезно ограничит ваши возможности.
Указатели - это способ C говорить об адресах памяти. По этой причине они имеют решающее значение. Поскольку у вас есть K & R, прочитайте это.
Пример использования см. В моем ответе на this . Как я сказал в этом ответе, это не обязательно, как вы это сделаете, учитывая вопрос.
Тем не менее, эта техника именно так работает с такими библиотеками, как MPIR и GMP libgmp, если вы не встречали его, поддерживает mathematica, maple и т. д. и является библиотекой для арифметики произвольной точности. Вы обнаружите, что mpn_t
является typedef для указателя; в зависимости от ОС зависит от того, на что он указывает. Вы также найдете много арифметики с указателями в медленной, C-версии этого кода.
Наконец, я упомянул об управлении памятью. Если вы хотите выделить массив чего-то, вам нужно malloc
и free
, которые имеют дело с указателями на области памяти; в частности, malloc
возвращает указатель на некоторое количество памяти после выделения или NULL
при ошибке.
Одно из моих любимых указателей - это заставить функцию-член класса C ++ действовать как поток в окнах, используя win32 API, т.е. иметь класс, содержащий поток. К сожалению, CreateThread
в Windows не будет принимать функции класса C ++ по очевидным причинам - CreateThread
- это функция C, которая не понимает экземпляры класса; поэтому вам нужно передать ему статическую функцию. Вот хитрость:
DWORD WINAPI CLASSNAME::STATICFUNC(PVOID pvParam)
{
return ((CLASSNAME*)pvParam)->ThreadFunc();
}
(PVOID - это void *
)
Что происходит, если он возвращает ThreadFunc
, который выполняется "вместо" (на самом деле STATICFUNC вызывает его) STATICFUNC
и может действительно обращаться ко всем закрытым переменным-членам CLASSNAME
. Гениально, а?
Если этого недостаточно, чтобы убедить вас, что указатели вроде равны C, я не знаю, что это. Или, может быть, нет смысла в C без указателей. Или ...