c - typedef'd array of pointers - copying values -


good day,

i have few simple typedefs so:

typedef int datatype; typedef datatype* arrayofnpointers[n]; 

so, datatype represents int, , type arrayofnpointers represents array of n pointers int's.

am able reliably perform deep copy of contents of 1 of these arrays so:

#define n (2) arrayofnpointers a1 = { 1, 2}; arrayofnpointers a2;  a2 = a1;    // safe? 

i know can directly copy struct's this, , know in general, if try assign int* pointers, qualify "shallow copy".

in case, end 2 independent fixed-size arrays contain elements {1, 2}?

thank you!

firstly, watch out:

arrayofnpointers a1 = {1, 2}; 

as far can tell, initialising pointers if integers. cannot end well. (i'll deal more later.)

but anyway:

safe?

nope. a1 , a2 both arrays; means that, among other things, cannot assigned to.

   a2 = a1; // ^^^^ wrong 

even if was possible [e.g. if pointers], wouldn't shallow copy - 2 [arrays pretending are] pointers point @ same block of memory. [only structs can shallow-copied way.]

a proper deep copy of array can performed in c for-loop:

for (int = 0; < n; ++i) {   a2[i] = a1[i]; } 

but you're dealing pointers, above counts shallow copy. you'll need more interesting deep-copy array:

for (int = 0; < n; ++i) {   a2[i] = malloc(sizeof(int));   *a2[i] = *a1[i]; } 

but what's wrong arrayofnpointers a1 = {1, 2};?

a lot. {1, 2} not initialising integers pointed to; initialising pointers.

fix 1

arrays of integers:

typedef datatype arrayofintegers[n]; arrayofintegers a1 = {1, 2}; 

fix 2

properly initialised arrays of pointers integers:

datatype arr[n] = {1, 2}; arrayofnpointers a1 = {&a[0], &a[1]}; 

or, if you'd use malloced memory, , allocate later:

arrayofnpointers a1 = {null}; 

the rules of initializer lists ensure tht pointers null.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -