This is a pointer to an array. It is not a pointer to a pointer. Arrays and pointers are different. An array has an address, but an array is not an address. An array is a series of contiguous elements.

This pointer points to the whole array and not just the first element, in the same way that a float * points to the whole float and not just the first byte.

If you have for example:

int foo[10];
int (*arrayABC)[10] = &foo;

then the expressions (*arrayABC) and foo are identical. E.g. foo[3] is the same as (*arrayABC)[3].

Answer from M.M on Stack Overflow
🌐
GeeksforGeeks
geeksforgeeks.org › c language › pointer-array-array-pointer
Pointer to an Array | Array Pointer - GeeksforGeeks
This pointer is useful when talking about multidimensional arrays. ... Here ptr is pointer that points to an array of 10 integers.
Published   April 30, 2025
🌐
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.
🌐
TutorialsPoint
tutorialspoint.com › cprogramming › c_pointer_to_an_array.htm
Pointer to an Array in C
Array values using pointer: *(ptr + 0): 1000.000000 *(ptr + 1): 2.000000 *(ptr + 2): 3.400000 *(ptr + 3): 17.000000 *(ptr + 4): 50.000000 Array values using balance as address: *(balance + 0): 1000.000000 *(balance + 1): 2.000000 *(balance + 2): 3.400000 *(balance + 3): 17.000000 *(balance + 4): 50.000000
🌐
Programiz
programiz.com › cpp-programming › pointers-arrays
C++ Pointers and Arrays
Notice that we haven't declared a separate pointer variable, but rather we are using the array name arr for the pointer notation. As we already know, the array name arr points to the first element of the array.
🌐
Cplusplus
cplusplus.com › forum › beginner › 271942
arrays and pointers - C++ Forum
There are still places for the occasional pointer or array, but its not all through code everywhere (this is an older style closer to C that still compiles but is not used due to better tools). one final way to think of it: you know how you can assign compatible types, like int x = 'z' ? The compiler knows to turn the letter into an integer here. The same is true with array to pointer: the compiler knows what you mean, and does the necessary things to make it so. ... When you declare the array (line 1 of your code), you have only created an array.
🌐
Medium
medium.com › @Dev_Frank › pointer-to-an-array-26e481f8deb0
POINTER TO AN ARRAY. Array of pointers | by Dev Frank | Medium
February 23, 2024 - It can be used to access individual elements in the array. On the other hand, ptrToArray is a pointer that points to the entire array. This type of pointer is useful when dealing with multidimensional arrays or passing arrays to functions.
🌐
Lawrence
www2.lawrence.edu › fast › GREGGJ › CMSC270 › Pointers › arrays_and_pointers.html
Arrays and Pointers
We copy the numbers from A over to this new array, destroy the old array that A used to point to, and finally make A point to the new array we created. In the first version of our sorting program we have already made some limited use of pointers in the array creation process.
Find elsewhere
Top answer
1 of 4
18

This is a pointer to an array. It is not a pointer to a pointer. Arrays and pointers are different. An array has an address, but an array is not an address. An array is a series of contiguous elements.

This pointer points to the whole array and not just the first element, in the same way that a float * points to the whole float and not just the first byte.

If you have for example:

int foo[10];
int (*arrayABC)[10] = &foo;

then the expressions (*arrayABC) and foo are identical. E.g. foo[3] is the same as (*arrayABC)[3].

2 of 4
4

If you have an object of a type T then a pointer to the object is declared like

T obj;

T *ptr = &obj;

Now let's the type T is defined the following way

typedef int T[10];

Thus the code above

T obj;

T *ptr = &obj;

can be rewritten using the typedef definition like

int obj[10];

int (*ptr)[10] = &obj;

In the both cases, when T is some abstract type and when T is an alias for int[10], ptr is a pointer to an object. In the last case ptr is a pointer to an array of 10 elements of type int. That is the object pointed to by ptr has array type. Arrays and poiters are different types.

Try the following simple demonstrative program

#include <stdio.h>

int main( void )
{
    typedef int T[10];

    T a;

    T *pa = &a;

    printf( "%zu\n", sizeof( *pa ) );

    int b[10];

    int ( *pb )[10] = &b;

    printf( "%zu\n", sizeof( *pb ) );
}    

Its output is

40
40

As you can see the both values are equal to the size of an integer array of 10 elements. So the pointers point to arrays.

If you write

int *arrayABC[10];

you will get an array of 10 pointers of type int *.

If you write

int (*arrayABC)[10];

you will get a pointer to an array of 10 integers.

🌐
O'Reilly
oreilly.com › library › view › understanding-and-using › 9781449344535 › ch04.html
4. Pointers and Arrays - Understanding and Using C Pointers [Book]
Quick Review of ArraysOne-Dimensional ArraysTwo-Dimensional ArraysMultidimensional ArraysPointer Notation and ArraysDifferences Between Arrays and PointersUsing malloc to Create a One-Dimensional ArrayUsing the realloc Function to Resize an ArrayPassing a One-Dimensional ArrayUsing Array NotationUsing Pointer NotationUsing a One-Dimensional Array of PointersPointers and Multidimensional ArraysPassing a Multidimensional ArrayDynamically Allocating a Two-Dimensional ArrayAllocating Potentially Noncontiguous MemoryAllocating Contiguous MemoryJagged Arrays and PointersSummary
🌐
Log2Base2
log2base2.com › C › pointer › pointer-to-an-array.html
Pointer to an array
/* * Pointer to an array */ #include<stdio.h> int main() { int arr[5]={10, 20, 30, 40, 50}; int (*ptr)[5]; //pointer to an array of 5 integers ptr = &arr; //ptr references the whole array /* *ptr is a pointer to the whole array *ptr+1 will point the next block of 5 elements */ printf("ptr = %p \t ptr+1 = %p\n",ptr,ptr+1); /* *ptr is a pointer to the first element in the array *ptr+1 will point the next element in the array */ printf("*ptr = %p \t *ptr+1 = %p\n",*ptr,*ptr+1); return 0; } Run it
🌐
GeeksforGeeks
geeksforgeeks.org › c language › array-of-pointers-in-c
Array of Pointers in C - GeeksforGeeks
July 23, 2025 - In C, a pointer array is a homogeneous collection of indexed pointer variables that are references to a memory location. It is generally used in C Programming when we want to point at multiple memory locations of a similar data type in our C program.
🌐
Engineering LibreTexts
eng.libretexts.org › campus bookshelves › delta college › c++ programming i (mcclanahan) › 12: pointers › 12.4: arrays, pointers and such
12.4.1: Pointer to an Array - Array Pointer - Engineering LibreTexts
May 4, 2025 - On dereferencing a pointer expression we get a value pointed to by that pointer expression. Pointer to an array points to an array, so on dereferencing it, we should get the array, and the name of array denotes the base address.
🌐
TutorialsPoint
tutorialspoint.com › cprogramming › c_array_of_pointers.htm
Array of Pointers in C
The name of an array can be used as a pointer because it holds the address to the first element of the array.
🌐
GNU
gnu.org › software › c-intro-and-ref › manual › html_node › Pointers-and-Arrays.html
Pointers and Arrays (GNU C Language Manual)
Thus, array + 3 converts array implicitly to &array[0], and the result is a pointer to element 3, equivalent to &array[3].
🌐
Programiz
programiz.com › c-programming › c-pointers-arrays
Relationship Between Arrays and Pointers in C Programming (With Examples)
In most contexts, array names decay to pointers. In simple words, array names are converted to pointers. That's the reason why you can use pointers to access elements of arrays.
🌐
Microchip Developer Help
developerhelp.microchip.com › xwiki › bin › view › software-tools › c-programming › data-pointers › pointers-arrays
C Programming Pointers and Arrays - Developer Help
By definition, an array variable without the square brackets and index represents the address of the array, which is also the address of the first element. So, we can simply say p = x; without the & (address of) operator. The second method is where we use the same syntax as when we assign an ...
🌐
Tutorialspoint
tutorialspoint.com › cplusplus › cpp_pointer_to_an_array.htm
C++ Pointer to an Array
Array values using pointer *(p + 0) : 1000 *(p + 1) : 2 *(p + 2) : 3.4 *(p + 3) : 17 *(p + 4) : 50 Array values using balance as address *(balance + 0) : 1000 *(balance + 1) : 2 *(balance + 2) : 3.4 *(balance + 3) : 17 *(balance + 4) : 50 · In the above example, p is a pointer to double which means it can store address of a variable of double type.
🌐
Studytonight
studytonight.com › c › pointers-with-array.php
C Language Pointers to Arrays | Studytonight
When an array in C language is declared, compiler allocates sufficient memory to contain all its elements. Its base address is also allocated by the compiler. ... Suppose the base address of arr is 1000 and each integer requires two bytes, the five elements will be stored as follows: Variable arr will give the base address, which is a constant pointer pointing to arr[0]. Hence arr contains the address of arr[0] i.e 1000.