В общем дело такое:
Я пишу функцию создания массива (допустим одномерного), возвращаю адрес первого (нулевого) символа (указатель).
Далее мне нужна функция которая может обработать (в т. ч. вывести на экран) этот массив - именно с этим у меня проблема. Входные параметры для этой функции - указатель на первый элемент массива и его длинна.
Вопрос: можно ли зная адрес начала массива, его длину и тип данных присвоить к новому массиву, для дальнейшей работы с ним, и как это сделать?
Другие языки программирования и технологии
Вопрос по указателям и массива С++
Мутно чтот описано.
Просто приведи код "функцию создания массива (допустим одномерного) "
опиши ее тут хотя бы,
опиши функцию другую для вывода
А то на ясно "присвоить к новому массиву"? Можно присвоить элементу массива, указателю на массив, но не так как ты это объяснил.
#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;
}
Просто приведи код "функцию создания массива (допустим одномерного) "
опиши ее тут хотя бы,
опиши функцию другую для вывода
А то на ясно "присвоить к новому массиву"? Можно присвоить элементу массива, указателю на массив, но не так как ты это объяснил.
#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;
}
#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();}
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();}
Если вы работает на уровне указателей, то решение таково
double *srcArray; // исходный массив
double *dstArray; // новый массив
int elemCount = 100; // количество элементов в массиве (я поставил 100)
dstArray=malloc(elemCount*sizeof(double));
memcpy(srcArray, dstArray, elemCount*sizeof(double));
Если тип элементов не double, то замените на нужный.
Пример кода работает не только в C++, но и в C.
Есть более современные решения, но это будет работать тоже.
double *srcArray; // исходный массив
double *dstArray; // новый массив
int elemCount = 100; // количество элементов в массиве (я поставил 100)
dstArray=malloc(elemCount*sizeof(double));
memcpy(srcArray, dstArray, elemCount*sizeof(double));
Если тип элементов не double, то замените на нужный.
Пример кода работает не только в C++, но и в C.
Есть более современные решения, но это будет работать тоже.
Похожие вопросы
- Си. Указатели и массивы.
- Два вопроса про указатели в С++ внутри.
- Вопрос про указатели в С++ внутри
- Инициализация массива. Указатели.
- Массив указателей в C++
- Помогите с программой Одномерные массивы и указатели
- 2 массива. Найти масимальную подпоследовательность с помощью указателей
- Указатель на строку - массив, как это?
- Инициализация массива указателей на объекты.
- Задача - описать класс "Массив" с параметрами: длина массива, указатель на первый элемент массива
#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;
}