Передача адреса переменной в функцию

Я не очень хорош в указателях, но я должен учиться на местах. Если мое понимание верно для меня, все это должно быть верным утверждением ниже.

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()) потому что это указывает на адрес, а не значение.

Другие вопросы по тегам