딱히 문제 없어보이는데, "안되더라고요"가 정확히 어떤 의미인지 적어주시는 게 좋아보입니다.
저 출력문에서 아무 값도 안 나오진 않았을테고, 뭐가 나오길 기대했는데 실제론 어땠다는 식으로요.
(안쪽 루프에 col_size를 써야 할 자리에 row_size가 적혔다거나 printf에 따옴표가 빠진 문제는 여기에 옮겨적으시다 그런 것 같고)
a는 배열이고, 수식에서 a라고만 쓰면(뒤에 [2]와 같은 인덱스 없이) 그것은 a[0]을 가리키는 포인터"처럼" 처리됩니다. 즉 a는 &a[0] 과 값도 같고 타입도 같습니다.(이 경우는 a는 char의 배열이고, 수식에서 쓰인 a는 char * 타입의 포인터처럼 쓰이겠네요)
p는 포인터이고 p의 값은 'w'가 저장된 주소이며, p[0], p[1] 등과 같이 배열과 동일하게 접근할 수 있지만, p는 엄연히 별개의 저장공간을 차지하고 있습니다.
numArr은 2차원 배열이고,
numArr이 수식에 쓰이면 &numArr[0]처럼 처리되며, 타입은 int (*)[4]
numArr[0]은 1차원 배열이고,
numArr[0]이 수식에 쓰이면 &numArr[0][0]처럼 처리되며, 타입은 int *
하지만 배열의 시작주소 = 첫원소의 시작주소이기 때문에 결과적으로
&numArr // int (*)[3][4]
numArr == &numArr[0] // int (*)[4]
numArr[0] == &numArr[0][0] // int *
딱히 문제 없어보이는데, "안되더라고요"가 정확히
딱히 문제 없어보이는데, "안되더라고요"가 정확히 어떤 의미인지 적어주시는 게 좋아보입니다.
저 출력문에서 아무 값도 안 나오진 않았을테고, 뭐가 나오길 기대했는데 실제론 어땠다는 식으로요.
(안쪽 루프에 col_size를 써야 할 자리에 row_size가 적혔다거나 printf에 따옴표가 빠진 문제는 여기에 옮겨적으시다 그런 것 같고)
좋은 하루 되세요!
괄호로 지적하신 부분은 옮기다가 그렇게 됬습니다 ㅠㅠ
괄호로 지적하신 부분은 옮기다가 그렇게 됬습니다 ㅠㅠ
예를 들어서
printf("%p", array);
printf("%x", &array[0][0]);
두개의 주소가 다르게 나오던데 그 이유가 무엇인가요?
어... 다르니까요. (?!)
어... 다르니까요. (?!)
포인터와 malloc() 조합을 써서 2차원 배열과 동일하게 array[i][j] 처럼 접근하여 쓸 수는 있지만 그래도 이것은 2차원 배열과는 다릅니다.
(출처: http://c-faq.com/aryptr/aryptr2.html)
a는 배열이고, 수식에서 a라고만 쓰면(뒤에
[2]
와 같은 인덱스 없이) 그것은 a[0]을 가리키는 포인터"처럼" 처리됩니다. 즉 a는 &a[0] 과 값도 같고 타입도 같습니다.(이 경우는 a는 char의 배열이고, 수식에서 쓰인 a는 char * 타입의 포인터처럼 쓰이겠네요)p는 포인터이고 p의 값은 'w'가 저장된 주소이며, p[0], p[1] 등과 같이 배열과 동일하게 접근할 수 있지만, p는 엄연히 별개의 저장공간을 차지하고 있습니다.
(출처: https://dojang.io/mod/page/view.php?id=307)
numArr은 2차원 배열이고,
numArr이 수식에 쓰이면 &numArr[0]처럼 처리되며, 타입은 int (*)[4]
numArr[0]은 1차원 배열이고,
numArr[0]이 수식에 쓰이면 &numArr[0][0]처럼 처리되며, 타입은 int *
하지만 배열의 시작주소 = 첫원소의 시작주소이기 때문에 결과적으로
위의 다섯 가지는 모두 동일한 값입니다. 타입은 제각각이죠.
(출처: https://codeng.tistory.com/8)
이게 본문과 동일한 케이스이고, arr 은 포인터입니다.
malloc으로 확보한 공간의 시작주소를 가리키고 있고,
그 공간을 쪼개어 1차원 배열처럼 쓰고 있는데 이 배열의 각 원소는 다시 malloc으로 확보한 공간을 가리키는 포인터이죠.
여기서는 그림에서 보다시피
&arr 과 arr의 값은 서로 다르고(포인터 변수의 주소와 값)
arr의 값은 arr[0]의 주소이며, 이것은 arr[0][0]의 주소와 같지 않고,
arr[0]의 값이 arr[0][0]의 주소입니다.
좋은 하루 되세요!
와우!!너무 친절한 답변 감사드립니다!!
와우!!너무 친절한 답변 감사드립니다!!
댓글 달기