wing
wing

Reputation: 151

How describe const pointer to an array in C/C++?

I know the type which is pointer to an int[10] (ptr->int[10]) is int (*var)[10], but how to describe those of type blow?

the type which is pointer to the const int[10] (ptr->const int[10])

the type which is const pointer to the int[10] (const ptr->int[10])

the type which is const pointer to the const int[10] (const ptr->const int[10])

Upvotes: 0

Views: 2680

Answers (2)

R Sahu
R Sahu

Reputation: 206577

int (*ptr1)[10] = malloc(sizeof(int)*10);             // Pointer to int[10]
const int (*ptr2)[10] = malloc(sizeof(int)*10);       // Pointer to const int[10]
int (* const ptr3)[10] = malloc(sizeof(int)*10);      // const Pointer to int[10]
const int (* const ptr4)[10] = malloc(sizeof(int)*10);// const Pointer to const int[10]

*ptr1[0] = 10; // OK.
*ptr2[0] = 10; // Not OK.
*ptr3[0] = 10; // OK.
*ptr4[0] = 10; // Not OK.

ptr1 = realloc(ptr1, sizeof(int)*10); // OK.
ptr2 = realloc(ptr2, sizeof(int)*10); // OK.
ptr3 = realloc(ptr3, sizeof(int)*10); // Not OK.
ptr4 = realloc(ptr4, sizeof(int)*10); // Not OK.

Upvotes: 7

Mohit Jain
Mohit Jain

Reputation: 30489

Declare the variable as you do:

const int somevar[10];

Now replace variable name with new typename and prepend the word typedef.

typedef const int ci10_type[10];

Now ci10_type is the type of const int [10]

You can do similar for more complex types also as long as you know how to declare those. (Functions as well as data)

typedef const int *cpi10_type[10];
typedef const int (*pci10_type)[10];

For pointer to these types you can use:

ci10_type *pci10var;

Upvotes: 1

Related Questions