Передача массива в кучу и в стек для работы - PullRequest
1 голос
/ 07 июня 2011

У меня простой вопрос на c ++, касающийся передачи массива в функцию foo ().Предположим, у меня есть два массива A и B:

double* A=new double[3];

и

double B[3];

Когда я передаю оба в функцию

foo(double* A; double *B)

, которая предназначена для манипулирования обоимимассивы.Однако, выполнив

foo(A,B)

, foo действует на копию A, и при выходе из foo () остаются только изменения в B.Это не тот случай, если foo определено как

foo(double* &A; double *B).

Мой вопрос: почему копия создается, хотя я передаю адрес A как double * A (как в случае B) впервый пример foo ()?

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

foo действует на копию A, и при выходе из foo () остаются только изменения в B.

Что именно вы делаете внутри foo? Изменения самих объектов должны быть видны вне foo в обоих случаях. Если вы пытаетесь изменить значение указателя A, оно не будет видно за пределами foo - копия указателя передается функции, но, конечно, она все еще указывает на тот же массив.

1 голос
/ 07 июня 2011

Если вы хотите передать ссылку на массив функции, вы должны использовать ссылку на двойной указатель:

foo(double** A, double **B);

double** A=new complex<double>[3];
...