컴공 신입생 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[]) 다 해줘야하는 것)
이게 맞음..???
리눅스 기준으로 알려줄 사람 ㅠㅠㅠㅠ
그냥 F맞고 재수강해라
아니 주로 실습에서 쓰는 내용에 대해서는 알겠는데 메모리 차이가 어떻게 되는지를 모르겠어 중간고사 에쁠 유지해야한단 말이야 ㅠㅠ
1. 이건 그림 아니면 말로 하기 힘들 거 같은데... for문 돌려가면서 %p로 주소 출력해서 비교해보셈 2. 그 말이 맞을 거임 아마
댓추
ㄱㅅㄱㅅ 일단 돌려볼게
http://c-faq.com/aryptr/index.html
나 영어 5등급임
번역기라도 돌리면서 볼 생각을해요 컴공인데 영어는 할 줄 알아야지
ㅋㅋㅋㅋㅋㅋ 가만히 있으면 될걸 굳이 빈축을 사네
주소 고정 여부의 차이 - dc App
malloc도 다양한 방법이 있음. 2차원 배열만큼의 공간을 통째로 할당하면 연속된 공간을 가지고 height를 돌면서 width만큼 할당하는 것을 반복문으로 짜면 width만큼의 따로 떨어진 배열들을 이중 포인터로 각각 가리키는 거고 동적 할당이나 정적 할당이냐의 차이가 아니라 구현의 차이임
이걸 질문에 적용해서 답변하자면 1번은 두 가지 경우 모두 구현이 가능하다이고 2번은 배열의 경우 컴파일러가 배열의 정보를 들고 있으므로 포인터 크기만큼의 추가 공간이 필요없는 것이 맞고 할당 해제의 경우 만약 두 번째 방법으로 적었으면 그렇게 하는 게 맞음
decay
이건 뭐 간단하게 설명할 수가 없네. 이미 잘 설명해둔 문서들이 인터넷에 많으니 한번 읽어봐도 좋고 여기서 간단하게 설명한다면 배열과 포인터는 둘다 유도형이라고 불려. 근데 포인터는 단순 타입 정보만 가지고 있고 배열은 차원, 크기 모두 다 가지고 있음.
컴파일 타임에 크기 정보 알고 모르고 차이 정도 아닌가
다들 감사합니다.. 영어로 된 것도 다 읽어봤어요 ㅠㅠ 시험 잘 보겠습니다.
동적메 쓰는 이유는, 인수값을 그때그때 유동적으로 쓰게 하기 위해, 변수의 메모리를 scanf 받은 수로 할당해주는거야 - dc App
즉 주소의 크기를 scanf 받은 값으로 정해준다공 - dc App