I have this simple code:
#include<stdio.h>
#include<stdlib.h>
int main(){
int (*array)[2] = malloc(sizeof(int)*2);
printf("%p\n",array[0]); //0x13c606700
printf("%p\n",array[0] 1); //0x13c606704
printf("%p", array[1]); //0x13c606708
}
I'm using malloc to allocate memory for an integer array of 2 elements. This returns a pointer for this said array. However, I don't understand why array[0] 1 and array[1] are yielding different addresses. array[0] 1 prints the address at array[0] 4 which is expected since an integer is of size 4 bytes. But this is not the same for array[1]. Why is this happening? Wouldn't intuition suggest that using malloc on a fixed-size array would enable the programmer to refer to the memory allocated using array notation (i.e array[i])?
CodePudding user response:
array[0] is an int[2]. When passed to the function it decays into a pointer to the first element, an int, which is 4 bytes on your system.
array[0] 1 adds the sizeof(int) to the pointer.
array[1] is the next int[2] (out of bounds). That's the sizeof(int) times two.
