Другие языки программирования и технологии

Вопрос по указателям и массива С++

В общем дело такое:
Я пишу функцию создания массива (допустим одномерного), возвращаю адрес первого (нулевого) символа (указатель).
Далее мне нужна функция которая может обработать (в т. ч. вывести на экран) этот массив - именно с этим у меня проблема. Входные параметры для этой функции - указатель на первый элемент массива и его длинна.
Вопрос: можно ли зная адрес начала массива, его длину и тип данных присвоить к новому массиву, для дальнейшей работы с ним, и как это сделать?
Мутно чтот описано.
Просто приведи код "функцию создания массива (допустим одномерного) "
опиши ее тут хотя бы,
опиши функцию другую для вывода

А то на ясно "присвоить к новому массиву"? Можно присвоить элементу массива, указателю на массив, но не так как ты это объяснил.

#define N 5

using namespace std;

int* make(int n)
{
int* mm = new int[n];

for (int i=0; i<n; i++)
{
mm[i] = -100 + rand()%201;
}

return mm;
}

void show(int *x, int n)
{
for (int i=0; i<n; i++)
{
cout << x[i] << ", ";
}

cout << endl;
}

int main()
{
srand( time(NULL) );
int *mas = make(N);

show(mas, N);

delete[] mas;

return 0;
}
Сергей Фрейгер
Сергей Фрейгер
73 454
Лучший ответ
Иван Севостьянихин #include
#define N 5

int *make(int n)
{
mm = new int[n];
mm[0]=0;
for (i=1; i<=n; i++)
{
mm[i]=-100+rand()%200;
}
cout << endl;

for (i=0; i<=n; i++)
{
cout << i << " " << mm[i] << "|";
cout << &mm[i] << endl;
}
cout << endl;

cout << mm << endl;
return mm;
}

void show(int *x)
{
cout << "x = " << *x << endl;
int y[N]; // как переместить в этот массив элементы созданного через адрес?

for (i=0; i<=n; i++)
{
// Вывод массива на экран. не знаю как
}
cout << endl;
}
int main()
{
srand(time(NULL));
M = make(N);
show(M);
return 0;
}
Иван Севостьянихин Премного благодарен!!!
#include "iostream"
using namespace std;
int *ca(int n){return new int[n];}
void out(int *a,int n){for(int i=0;i< n;i++)cout<<a[i]<<' ';}
int main(){
int *p,n=5; p=ca(n); for(int i=0;i< n;i++)p[i]=i*i; out(p,n);
cout<<endl; cin.get();}
Борис Миклин
Борис Миклин
72 919
Если вы работает на уровне указателей, то решение таково

double *srcArray; // исходный массив
double *dstArray; // новый массив
int elemCount = 100; // количество элементов в массиве (я поставил 100)

dstArray=malloc(elemCount*sizeof(double));
memcpy(srcArray, dstArray, elemCount*sizeof(double));

Если тип элементов не double, то замените на нужный.
Пример кода работает не только в C++, но и в C.
Есть более современные решения, но это будет работать тоже.