08:15초 (10.15) 2차원 배열의 주소를 일반 포인터에 담을 때 생기는 Warnimg 관련 질문
안녕하세요. 교수님
10.15강의 08:15초의 내용중에 교수님이 2차원 배열 주소를 그냥 포인터에는 담을수가 없다고 하셨습니다.
제가 똑같이 코드를 쳐서 빌드를 해보니 워닝이 뜨는 것을 확인했는데요. 실제로 printf로 돌려보니 주소는 제대로 뜨는 것도 확인했습니다.
warning이면 "경고" 일 뿐 "error"는 아니기 때문에 쓰려고 하면 쓸수 있을 것 같은데
쓰지 말아야하는 이유가 따로 있을까요 ??
#include <stdio.h>
int main()
{
int* pt;
int(*pt1)[3];
int ar[2][3] = { 3, };
pt = ar;
pt1 = ar;
printf("%p %p %p", pt, pt1, ar);
return 0;
}
답변 2
2
C/C++ 프로그래밍을 매우 저수준(low level)에서 할 경우에는 데이터의 구조를 보고 모두 포인터로 바꿔서(보다 정확히는 배열의 첫 주소) 효율적으로 프로그래밍을 합니다. 2차원 배열을 (1차원 = 그냥) 포인터로 캐스팅해서 사용하는 것도 흔한 일입니다. 다만, 포인터 연산을 할 때는, 예를 들어서 + 연산을 할 때는 바이트 단위가 아니라 자료형의 크기를 사용해야 하는데 포인터 캐스팅이 되면 그 포인터 연산 기준이 되는 자료형의 크기라 바뀌게되겠지요. (사실 그 자료형의 크기를 바꿔서 프로그래머가 편한 대로 포인터 연산을 하기 위해서 일부러 캐스팅을 하는 경우가 더 많습니다.)
C언어의 철학을 다시 한 번 생각해보세요. 참고로 C++에서도 워닝은 왠만하면 피하는 것을 권장합니다. C++에서 컨테이너 배우시면 안전하게 사용하시는 법을 이해하시게 될겁니다.
Export template 안됨
1
26
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
56
3
main 함수에서 왜 int만 선언이 되는걸까요
1
57
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
55
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
49
1
프로토타입과 함수간의 인자 불일치
1
73
2
12.12 헤더 관련 질문
1
60
2
Visual Studio Community 2026 사용 문의
1
138
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
61
2
getchar(), putchar()
1
94
3
강의자리ㅛ
1
80
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
114
2
소스파일안에 여러 파일
1
76
2
F5와 F7의 차이
1
79
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
70
1
Step over 기능 문의
1
53
2
2.6 강의 따옴표 출력 규칙 문의
1
76
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
61
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
65
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
54
2





