Pointer to an array

int a[10];
int (*ptr)[10];

Here ptr is an pointer to an array of 10 integers.

ptr = &a;

Now ptr is pointing to array of 10 integers.

You need to parenthesis ptr in order to access elements of array as (*ptr)[i] cosider following example:

Sample code

#include<stdio.h>
int main(){
  int b[2] = {1, 2}; 
  int  i;
  int (*c)[2] = &b;
  for(i = 0; i < 2; i++){
     printf(" b[%d] = (*c)[%d] = %d\n", i, i, (*c)[i]);
  }
  return 1;
}

Output:

 b[0] = (*c)[0] = 1
 b[1] = (*c)[1] = 2

Array of pointers

int *ptr[10];

Here ptr[0],ptr[1]....ptr[9] are pointers and can be used to store address of a variable.

Example:

main()
{
   int a=10,b=20,c=30,d=40;
   int *ptr[4];
   ptr[0] = &a;
   ptr[1] = &b;
   ptr[2] = &c;
   ptr[3] = &d;
   printf("a = %d, b = %d, c = %d, d = %d\n",*ptr[0],*ptr[1],*ptr[2],*ptr[3]);
}

Output: a = 10, b = 20, c = 30, d = 40

Answer from Chinna on Stack Overflow
🌐
Reddit
reddit.com › r/c_programming › an array of pointers vs a pointer to an array
r/C_Programming on Reddit: An array of pointers vs a pointer to an array
February 1, 2021 -

I've been reading K&R and the syntax that differentiates an array of pointers vs a pointer to an array is confusing me. They say that

int *array[100];

is an array of 100 pointers to integers. On the other hand,

int (*array)[100];

is a pointer to an array of 100 integers.

Can someone elaborate on why this is the case?

It seems to me that it should be the other way around, since *(array[100]) reads like a pointer to an array with 100 elements, while (*array)[100] looks very much like it should be an array of 100 pointers.

What am I missing here?

Top answer
1 of 4
7
Declarations in C are written to match their usage. So if you write int *array[100], this means array has type such that *array[100] is of type int. (Ignoring, of course, that 100 is an invalid array index!) So to determine the type of array, we can use the operator precedence rules. Array indexing is higher precedence than dereferencing, so *array[100] means that we first get index into an array, and then dereference the object we get out, and that all should result in an int. This means that array is an array of pointers to int. (*array)[100] reverses this. Now, it says if we dereference array, and then index into whatever we get out as an array, we get an int. Thus, it's a pointer to an array of ints. Lots of people try to explain this in terms of the 'right-left rule' or the 'spiral rule' or whatever - I find these just make things harder. It's all operator precedence.
2 of 4
5
What you're missing is probably the worst feature of C, and possibly the worst feature of any language, which is its confusing, convoluted type syntax. It doesn't read left to right, or right to left, but inside out. To try and make sense of it, it was supposed to mirror actual usage in an expression: *array[i] # parsed as *(array[i]), index first # then deref, so an array of pointers (*array)[i] # deref first then index, so pointer to array However, here C throws another curve ball: because derefs, derefs with offsets, and array indexing are all really the same thing, then whatever the declaration of array, either of these will work with no error! Good luck...
Confused about pointer pointers and array pointers Oct 20, 2023
r/C_Programming
2y ago
Pointer arrays Jul 7, 2022
r/cpp_questions
4y ago
Arrays in c using pointers Jan 27, 2023
r/learnprogramming
3y ago
More results from reddit.com
Top answer
1 of 6
4

Pointer to an array

int a[10];
int (*ptr)[10];

Here ptr is an pointer to an array of 10 integers.

ptr = &a;

Now ptr is pointing to array of 10 integers.

You need to parenthesis ptr in order to access elements of array as (*ptr)[i] cosider following example:

Sample code

#include<stdio.h>
int main(){
  int b[2] = {1, 2}; 
  int  i;
  int (*c)[2] = &b;
  for(i = 0; i < 2; i++){
     printf(" b[%d] = (*c)[%d] = %d\n", i, i, (*c)[i]);
  }
  return 1;
}

Output:

 b[0] = (*c)[0] = 1
 b[1] = (*c)[1] = 2

Array of pointers

int *ptr[10];

Here ptr[0],ptr[1]....ptr[9] are pointers and can be used to store address of a variable.

Example:

main()
{
   int a=10,b=20,c=30,d=40;
   int *ptr[4];
   ptr[0] = &a;
   ptr[1] = &b;
   ptr[2] = &c;
   ptr[3] = &d;
   printf("a = %d, b = %d, c = %d, d = %d\n",*ptr[0],*ptr[1],*ptr[2],*ptr[3]);
}

Output: a = 10, b = 20, c = 30, d = 40

2 of 6
3

Background

Think of pointers as just a separate data type. They have their own storage requirements -- such as their size -- they occupy 8 bytes on a x86_64 platform. This is the case of void pointers void*.

In those 8 bytes the information stored is the memory address of another piece of data.

The thing about pointers is that since they "point" to another piece of data, it's useful to know what type that data is too so you can correctly handle it (know its size, and structure).

In stead of having their own data type name such as pointer they compose their name based on the data type they refer to such as int* a pointer to an integer. If you want a plain pointer without type information attached to it you have the option of using void*.

So basically each pointer (to int, to char, to double) is just a void* (same size, same use) but the compiler knows the data being pointed to is of type int and allows you to handle it accordingly.

/**
 *  Create a new pointer to an unknown type.
 */
void* data;

/**
 *  Allocate some memory for it using malloc
 *  and tell your pointer to point to this new
 *  memory address (because malloc returns void*).
 *  I've allocated 8 bytes (char is one byte).
 */
data = malloc(sizeof(char)*8);

/**
 *  Use the pointer as a double by casting it
 *  and passing it to functions.
 */
double* p = (double* )data;
p = 20.5;
pow((double* )data, 2);

Pointer to array

If you have an array of values (let's say integers) somewhere in memory, a pointer to it is one variable containing its address.

You can access this array of values by first dereferencing the pointer and then operating some work on the array and its values.

/**
 *  Create an array containing integers.
 */
int array[30];
array[0] = 0;
array[1] = 1;
...
array[29] = 29;

/**
 *  Create a pointer to an array.
 */
int (*pointer)[30];

/**
 *  Tell the pointer where the data is.
 */
pointer = &array;

/**
 *  Access the data through the pointer.
 */
(*pointer)[1] = 999;

/**
 *  Print the data through the array.
 *  ...and notice the output.
 */
printf("%d", array[1]);

Array of pointers

If you have an array of pointers to values, the entire array of pointers is one variable and each pointer in the array refers to somewhere else in the memory where a value is located.

You can access this array and the pointers inside it without dereferencing it but in order to reach a certain value from it you will have to dereference one of the pointers inside the array.

/**
 *  Create an array containing pointers to integers.
 */
int *array_of_pointers[30];
array_of_pointers[0] = 0;
array_of_pointers[1] = 1;
...
array_of_pointers[29] = 29;
Discussions

C pointer to array/array of pointers disambiguation - Stack Overflow
The reason that the first one is ... allowed to wrap parentheses around declarators. P[N] is an array declarator. P(....) is a function declarator and *P is a pointer declarator. So everything in the following is the same as without any parentheses (except for the one of the functions' ... More on stackoverflow.com
🌐 stackoverflow.com
c - Pointer to array of pointer vs pointer to an array - Stack Overflow
I have been given a .o file which creates a box_t ** and I have to use it. Now, I don't know if it is case 1: an pointer to an array of box_t or case 2: an pointer to an array of box_t * I wrote a More on stackoverflow.com
🌐 stackoverflow.com
Difference Between Pointer to an Array and Array of Pointers - Programming & Development - Spiceworks Community
Can anyone explain to me how the compiler differentiates the following: int *a[10] ; int (*a)[10]; Thanks More on community.spiceworks.com
🌐 community.spiceworks.com
0
March 28, 2007
vector of vector of int OR vector of pointer to vector of int ? (Performance)
Rather, it's the other way around. To understand this, you have to know the way vectors and containers overall work. Any object of type T has a fixed size equal to sizeof( T ). This implies that any container, when seen as an object, has a constant size, including vectors. This works because the vector object doesn't really contain the objects which are conceptually in it. Instead, it holds a pointer to a section of dynamic memory where these objects are located. Thus, a vector of vectors is an object which holds a pointer to a dynamic array of objects which themselves hold each one a pointer to some other array of objects. A vector of pointers to vectors is an object which holds a pointer to an array of pointers, each of these pointers referring to an object which holds yet another pointer to an array of yet more objects. As you can see, the former involves 2 layers of indirection for reaching an object in the inner vector, while the later involves 3. Therefore, the former has better performance. More on reddit.com
🌐 r/cpp_questions
19
10
June 5, 2018
People also ask

What is a Pointer to an Array?
A pointer to an array, also known as an array pointer, is used for accessing the various components of any given array. It focuses on the 0th component of any given array and can be declared to point to a whole array rather than only a single array component.
🌐
testbook.com
testbook.com › home › key differences › difference between a pointer to an array and array of pointers | testbook.com
Difference Between a Pointer to an Array and Array of Pointers ...
Can you resize the allocated memory of a pointer?
Yes, you can easily resize the allocated memory of a pointer later at any given time.
🌐
testbook.com
testbook.com › home › key differences › difference between a pointer to an array and array of pointers | testbook.com
Difference Between a Pointer to an Array and Array of Pointers ...
🌐
GeeksforGeeks
geeksforgeeks.org › c language › difference-between-pointer-to-an-array-and-array-of-pointers
Difference between pointer to an array and array of pointers - GeeksforGeeks
July 11, 2025 - : "Array of pointers" is an array of the pointer variables. It is also known as pointer arrays. Syntax: ... We can make separate pointer variables which can point to the different values or we can make one integer array of pointers that can ...
🌐
Aticleworld
aticleworld.com › home › difference between pointer to an array and array of pointers
Difference between pointer to an array and array of pointers - Aticleworld
March 13, 2020 - I am assigning the address of the array and address of the first element to the pointers. Now in the last, I am displaying the stored address by the pointers before and after performing increment operation. So the output will be, p = 0x0061FF04, ptr = 0x0061FF04 p = 0x0061FF08, ptr = 0x0061FF18 · Because the base type of p is int while the base type of ptr is ‘an array of 5 integers’. We know that the pointer arithmetic is performed relative to the base size, so if we write ptr++, then the pointer ptr will be shifted forward by 20 bytes.
🌐
IIES
iies.in › home › about iies › iies vision
Array of Pointers and Pointer to Array in C Explained.
May 15, 2026 - Understanding the difference between ... management and data handling. Arrays of pointers offer flexibility for dynamic data, while pointers to arrays improve performance with contiguous memory storage....
Price: $$$
Address: No 80, Ahad Pinnacle, Ground Floor, 5th Main, 2nd Cross, 5th Block, Koramangala Industrial Area, 560095, Bangalore
🌐
BYJUS
byjus.com › gate › difference-between-pointer-to-an-array-and-array-of-pointers
Find the Difference Between Pointer to an Array and ...
March 29, 2023 - But let us first know a bit more about each of them individually. The array pointer is an alternative name to a pointer to an array. We generally make use of this pointer for accessing the various components of any given array.
Find elsewhere
🌐
LinkedIn
linkedin.com › pulse › difference-between-pointer-array-pointers-c-gupta-
Difference between pointer to an array and array of pointers in C++:
September 19, 2023 - Syntax: Pointer to an array : int *ptr; Array of pointers : int *ptr[3]; Pointer to an array: Pointer to an array is also known as array pointer. We are using the pointer to access the components of the array.
🌐
Testbook
testbook.com › home › key differences › difference between a pointer to an array and array of pointers | testbook.com
Difference Between a Pointer to an Array and Array of Pointers | Testbook.com
It focuses on the 0th component of any given array and can be declared to point to a whole array rather than only a single array component. An Array of Pointers, also known as pointer arrays, refers to an array of various pointer variables.
🌐
Blogger
programmertutor16.blogspot.com › 2013 › 10 › pointer-to-array-vs-array-of-pointers.html
Pointer to an array vs Array of pointers - PROGRAMMER TUTORIAL
Difference between pointer to an array and array of pointers in c? Pointer to an array: Pointer to an array is also called as array pointer. How to declare pointer to an array? int (* ptr)[3] = NULL; /* pointer to an array of three integers */ The above declaration is the pointer to an array ...
🌐
Quora
quora.com › What-is-the-difference-between-an-array-of-pointers-and-a-pointer-to-an-array-using-suitable-example
What is the difference between an array of pointers and a pointer to an array using suitable example? - Quora
Answer (1 of 2): Array of pointer means , we have an array and each element in that array is a pointer . For e.g. - *p[50].// This means we have an array with each element as a pointer. Pointer to an array means , we have an array and that array is pointed by a pointer for some functions . For e...
🌐
Oreate AI
oreateai.com › blog › pointer-to-an-array-vs-array-of-pointers-untangling-the-cc-conundrum › 72ad23502d36225235e7ea63db682f56
Pointer to an Array vs. Array of Pointers: Untangling the C/C++ Conundrum - Oreate AI Blog
February 24, 2026 - To access an element, you'd use (*ptrToArray)[i], which means "dereference the pointer to get the array, then access the i-th element." It's like saying, "Go to the property, then open the door to the third room." On the other hand, an array of pointers is quite different.
🌐
Quora
quora.com › Is-there-any-difference-between-an-array-of-pointers-and-the-pointer-to-an-array-in-C
Is there any difference between an array of pointers and the pointer to an array in C? - Quora
Answer (1 of 7): So it seems clear that C programming 101 students have gotten to pointers week. Pointers 101 A pointer in C is a typed integer variable that contains an address. An address is an integer that maps to a memory cell. Pointers have the quality that adding or subtracting from them...
🌐
Quora
quora.com › What-is-the-difference-between-the-array-of-pointers-and-pointer-arrays
What is the difference between the array of pointers and pointer arrays? - Quora
Answer (1 of 5): I think by pointer arrays you mean pointer to an array. The difference between the two is: 1. Array of pointers is an array which consists of pointers. Each pointer in the array points to a memory address. For example, you can have an array of Pointers pointing to several strin...
🌐
W3Schools
w3schools.com › c › c_pointers_arrays.php
C Pointers and Arrays
Well, in C, the name of an array, is actually a pointer to the first element of the array.
🌐
Quora
quora.com › What-is-the-difference-between-array-of-pointers-and-pointer-to-an-array
What is the difference between pointer and array? - Quora
February 2, 2018 - If you create an array of size N, you have allocated storage for N elements. A pointer doesn’t allocate anything. It only holds an address or a null value (NULL or nullptr). OK, I suppose it could also hold garbage if you fail to initialize it properly, and it can also be abused to hold certain ...
🌐
Spiceworks
community.spiceworks.com › programming & development
Difference Between Pointer to an Array and Array of Pointers - Programming & Development - Spiceworks Community
March 28, 2007 - Can anyone explain to me how the compiler differentiates the following: int *a[10] ; int (*a)[10]; Thanks