Как скопировать массив указателя на другой указатель.
Мой подход таким образом
int *ptr2[(i-1)*100];
int *ptr1;
ptr1=&ptr2[(i-1)*100];
Каков эффективный способ копирования, чтобы он занимал меньше цикла процессора.
Как скопировать массив указателя на другой указатель.
Мой подход таким образом
int *ptr2[(i-1)*100];
int *ptr1;
ptr1=&ptr2[(i-1)*100];
Каков эффективный способ копирования, чтобы он занимал меньше цикла процессора.
Если вам нужно продублировать (скопировать) ptr2
, вам нужно объявить ptr1
с правильным типом, выделить место для массива ptr1
, затем скопировать содержимое ptr2
в ptr1
#include <malloc.h>
#include <string.h>
int *ptr2[(i-1)*100];
int **ptr1; // a pointer to a pointer to an int
ptr1 = malloc(sizeof(ptr2));
memcpy(ptr1, ptr2, sizeof(ptr2));
Примечание: это пример. Всегда проверяйте, чтобы malloc
выделил блок памяти перед его использованием и освободите его, когда он больше не нужен (используйте free
)
С другой стороны, если вы просто хотите создать псевдоним для ptr2
int *ptr2[(i-1)*100];
int **ptr1; // a pointer to a pointer to an int
ptr1 = ptr2;
sizeof(ptr2)
вернется?
- person qrdl; 04.08.2015
ptr2
- это массив, содержащий (i-1)*100
элементов типа int*
, поэтому sizeof(ptr2)
вернет количество байтов, занятых этим массивом, которое будет зависеть от архитектуры оборудования. Имя сбивает с толку, так как *
помещается рядом с именем переменной, а не рядом с int
. Более четкое заявление могло бы быть таким: int* arrayOfPointersToIntegers[(i-1)*100];
. В целом код в ответе будет вести себя так, как задумано.
- person Evil Dog Pie; 04.08.2015
memcpy
в отличие от какой-либо другой техники ручного прядения. Я подозреваю, что большинство реализаций memcpy
(являющейся библиотечной функцией) предварительно оптимизированы для повышения производительности, хотя во встроенном ПО это не всегда верно для некоторых конкретных задач.
- person Evil Dog Pie; 04.08.2015
Вы можете использовать memcpy
для копирования значений -
int *ptr2[(i-1)*100];
int **ptr1;
prt1=malloc(sizeof(ptr2)); //also remember to free allocated memory.
memcpy(ptr1,ptr2,sizeof(ptr2));
sizeof
? malloc
и memcpy
оба принимают size_t
, который предоставляет sizeof
.
- person Quentin; 04.08.2015
ptr1
?
- person Pynchia; 04.08.2015
int *ptr1
, ptr1 является указателем на целое число. Но ptr2
- это массив указателей (на целое число), а не массив целых чисел.
- person Pynchia; 04.08.2015
ptr2
размера(i - 1) * 100
, а затем вы индексируете его с помощью(i - 1) * 100
. Этот индекс слишком велик на 1. - person meaning-matters   schedule 04.08.2015