Передача адреса переменной в функцию
Я не очень хорош в указателях, но я должен учиться на местах. Если мое понимание верно для меня, все это должно быть верным утверждением ниже.
int* a;
int b = 10;
a = &b;
(*a) = 20;
(*a) == b; //this should be true
если у вас есть такая функция:
void copy(int* out, int in) {
*out = in;
}
int m_out, m_in;
copy(&m_out, m_in);
m_out == m_in; // this should also be true
но я видел такую функцию
create(float& tp, void* form, char* title);
Я понимаю указатель void, он может быть приведен к чему угодно, я понимаю символьный указатель, который в основном представляет собой строку в стиле ac.
Я не понимаю первый аргумент, который является адресом некоторого типа, скажем, с плавающей точкой, но это может быть что угодно, структура, int и т. Д.
То, что там происходит?
2 ответа
Сначала это
int m_out, m_in;
copy(&m_out, m_in);
неопределенное поведение - вы передали неинициализированный vaiable m_in
функционировать - и, следовательно, пытаясь сделать копию неинициализированной переменной.
Это:
create(float& tp, void* form, char* title);
не имеет смысла в C. Похоже на ссылку из C++.
Первый аргумент является ссылкой, это просто означает, что если вы измените это поле в вашей функции create
поле все равно останется измененным (даже в функции, в которую вы вызвали create()
) потому что это указывает на адрес, а не значение.