Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.182.179] |
|
Сообщ.
#1
,
|
|
|
Вопрос наверное простой, но что-то я запутался ) с этими указателями.
Цель изменить аргумент передаваемый в функцию // пример 1 func1 (int *n) { *n = 2; } main() { int x = 1; func1 (&x); // здесь икс станет равен 2 } // ---------------------------------------- // пример 2 - как через две функции пропихнуть аргумент который нужно изменить ? func1 (int *n) { *n = 2; } func2 (int ??? m) // что здесь нужно ? { func1( ??? m); } main() { int x = 1; func2 (&x); } |
Сообщ.
#2
,
|
|
|
Просто передавай указатель, у тебя меняется значение ведь. Какие проблемы?
// ---------------------------------------- // пример 2 - как через две функции пропихнуть аргумент который нужно изменить ? func1 (int *n) { *n = 2; } func2 (int* m) // что здесь нужно ? { func1(m); } main() { int x = 1; func2 (&x); } Добавлено В С++ аргументы в функции передаются по умолчанию по значению. В твоем случае ты по значению передаешь указатель. Соответственно, если ты изменишь адресс указателя, например выделишь новую память внутри функции и присвоишь ее переданному в аргументе указателю, то при выходе из функции - будет утечка памяти. А твой указатель не изменится. В твоем же случае ты менаешь значение указателя. |
Сообщ.
#3
,
|
|
|
Wound Спасибо, сейчас попробую, работает
Добавлено В примере 2 будет утечка памяти или нет ? Всё там правильно или нужно по-другому ? |
Сообщ.
#4
,
|
|
|
Цитата E.A. @ В примере 2 будет утечка памяти или нет ? Всё там правильно или нужно по-другому ? Нет там не будет утечки памяти, потому как ты передаешь адрес переменной, расположенной на стеке. В случае с динамически выделенной паматью, нужно будет выделять ее до вызова функции и передавать указатель. Например там: func1 (int *n) { *n = 2; } func2 (int* m) // что здесь нужно ? { func1(m); } main() { int* x = new int(); //! Выделяем память динамически func2 (x); //! Устанавливаем значение /*работаем с x */ ... delete x; //! Освобождаем память. } |
Сообщ.
#5
,
|
|
|
Wound Спасибо. Вопрос решен.
|
Сообщ.
#6
,
|
|
|
func1 (int& n) { n = 2; } int main() { int x = 1; func1 (x); // здесь икс станет равен 2 } |
Сообщ.
#7
,
|
|
|
Цитата E.A. @ Вопрос наверное простой, но что-то я запутался ) с этими указателями. Цель изменить аргумент передаваемый в функцию // пример 1 func1 (int *n) { *n = 2; } main() { int x = 1; func1 (&x); // здесь икс станет равен 2 } // ---------------------------------------- // пример 2 - как через две функции пропихнуть аргумент который нужно изменить ? func1 (int *n) { *n = 2; } func2 (int ??? m) // что здесь нужно ? { func1( ??? m); } main() { int x = 1; func2 (&x); } Это работает на чистом С , на C++ можно так тоже ( вопрос зачем ) и так как тебе написали, лучше поздно чем никогда |
Сообщ.
#8
,
|
|
|
Цитата sergioK @ func2 (int * m) // здесь тоже нужен указатель { func1(m); } |