#include<stdio.h>
int main(){
int array[3] = {1,2,3};
printf("%p \n",array); //array의 시작 주소를 반환(array의 첫 번째 인자의 시작 부분을 가리킴) : 0x7fffffffdca4
printf("%d \n",*array); //array의 시작 주소의 값을 반환 : 1
printf("%p \n", array + 1); //array의 두번째 인자의 주소를 반환 : 0x7fffffffdca8 (+1은 +4byte)
printf("%p \n",&array); //array의 시작 주소를 반환(array 전체의 시작 부분을 가리킴) : 0x7fffffffdca4
printf("%p \n",(&array)+1); //array 배열 전체의 다음 주소를 가리킴 : 0x7fffffffdcb0 (2차원 배열이면 다음 배열 가리킴 - [{1,2,3},{4,5,6}] 의 4 시작부분 주소)
int (*ptr)[3] = &array; // 배열포인터 (원소가 3개로 이루어진 array라는 배열을 가리키는 포인터 변수 ptr)
printf("%p \n",ptr); // 0x7fffffffdca4
int a, b, c;
a = 10; b = 20; c = 30;
int *ap, *bp, *cp;
ap = &a; bp = &b; cp = &c;
int *(arr[3]) = {ap, bp, cp}; // 포인터 배열 (포인터 원소로 이루어진 배열 arr)
printf("%p \n",arr); // 포인터 배열 - 원소가 포인터로만 이루어진 원소 3짜리 배열 : 0x7fffffffdcb0
return 0;
}
malloc을 배열 포인터로 초기화 & cast
int (*intPtr)[5];
intPtr = (int(*)[5])malloc(sizeof(int)*5);