컴공 신입생 C언어 대가리 존나 깨지는 중이다 도와줘..

일단 배열의 이름은 무조건 배열 시작 위치를 지정하는거고 바뀌지 않는다는건 알겠음.

근데,

int ary[][]로 정적 선언한거랑

int **ary로 선언해서 malloc으로 동적 할당해서 선언한거랑

어떻게 차이가 나는거임?

그냥 둘 다 똑같음??

배열은 stack
동적할당으로 포인터 잡은건 heap에 쌓이는건 알겠는데

메모리 구조가 어떻게 되는거?

예를 들어 1차원 배열은

ary[0]
ary[1]
ary[2]
ary[3]
.
.
.
이런 메모리 구조잖아

이차원 배열이랑 동적 할당으로 얻은 이차원 배열 포인터는 구조가 어떻게 되는거임?

(행이 n + 1개, 열이 m + 1개 있을 때)

ary[0][0]
ary[0][1]
.
.
ary[0][m]
ary[1][0]
.
.
.
ary[1][m]
ary[2][0]
.
.
.
[이차원 배열 메모리 구조]

ary[0]
ary[1]
ary[2]
.
.
.
ary[n]
ary[0][0]
ary[0][1]
.
.
ary[0][m]
ary[1][0]
.
.
ary[1][m]
ary[2][0]
.
.
.

[포인터 동적할당으로 짠 배열]

이렇게 생각했는데 맞음?

내일 기말고사인데 살려조 퓨ㅠㅠ

아니 쓰다가 느끼는건데 나 오개념 개오지믄거 같은데…





그리고 두 번째 질문은

1차원 배열에서

ary = &ary[0]인거고 (ary[0]의 위치를 가르키는 포인터가 없어서 메모리 차지 X)

포인터에서는 &ary[0]을 값으로 가지는 ary라는 포인터가 있어서 메모리 차지 ㅇ
(그래서 2차원 배열에서 동적할당하면 free(ary)랑 free(ary[]) 다 해줘야하는 것)

이게 맞음..???


리눅스 기준으로 알려줄 사람 ㅠㅠㅠㅠ