Misha Shepsis
Misha Shepsis

Reputation: 3

How to pass in a dynamically allocated array as an argument to a function

So I created a dynamically allocated array of structs pretend that structtype is the name of the struct, and arr is the array.

structtype * arr;
arr = new structtype[counter+15];

Then I attempted to pass that array of structs into multiple types of functions with prototypes such as:

void read_info(structtype (&arr)[15], int integer);

and

void Append(structtype arr[15]);

In turn I got these errors:

error: cannot convert ‘structtype’ to ‘structtype (&)[15]’

and

error: cannot convert ‘structtype**’ to ‘structtype (&)[15]'

Can yall help me figure out how to get rid of these errors, for example dereferencing the pointer part of the array or something.

Upvotes: 0

Views: 93

Answers (1)

Henrique Bucher
Henrique Bucher

Reputation: 4474

Your array is somewhere in memory, location which is pointed by the actual variable arr the pointer.

The array is therefore represented by the pointer, however the pointer carries no information about where the array ends or its size, unlike std::vector<>.

So you need to pass it with the known size as in:

#include <cstdio>

struct structtype {
    int a;
};

void dosomething( structtype* s, int size  ) {
    for ( int j=0; j<size; ++j ) {
        printf( "s[%d]=%d\n", j, s[j] );
    }
}

int main() {
    int counter = 50;
    structtype * arr;
    arr = new structtype[counter+15];
    dosomething( arr, counter + 15 );
    delete arr;
}

Godbolt: https://godbolt.org/z/95P5d4sfT

Upvotes: 2

Related Questions