먼저 함수 sum의 매개변수를 한번 볼까요?
int* num1[][100], int* num2[][100]
위 두 변수는 2차원 배열의 포인터 변수 입니다.
이번에는 함수 sum의 구현부를 한번 볼까요?
sum_idx = num1[i][j] + num2[i][j];
위의 식을 한글로 풀어쓰면
sum_idx 변수에 num1[i][j]의 주소 값과 num2[i][j]의 주소값을 더한 값을 대입하라 라는 뜻이 됩니다.
주소 값에 주소 값을 더하라니... 말이 안되죠?
결국에는 sum 함수의 매개변수를 포인터 변수가 아닌 일반 배열 변수로 선언하시면 됩니다.
jo4397 1년 전
아래와 같이 함수를 이용하여 프로그래밍을 하고자 하였습니다.
그런데 17번째 num2에 빨간 줄이 나타나고, ‘expression must havde integral type’(E0031)라는 컴파일에러가 뜹니다.
sum함수에 2차원 배열 a와 b를 num1과 num2라는 포인터로 전달받고, 이것에 인덱싱하여 sum_idx라는 각 인덱스의 합을 구하여 출력하고자 하였습니다.
※물론 아래 코드가 틀렸다는 것은 알고 있습니다. 최종적으로 n행 m열의 마지막 인덱스의 합이 sum_idx에 덮어씌워져서 출력될 것이므로 잘못된 코드입니다.
다만 지금 궁금한 것은.. E0031에러가 왜 뜨는 것인지.. 포인터에 인덱스 번호를 부여하여 값에 접근하고, 이를 연산하여 출력하고자 하는 것이 왜 문제가 되는지 궁금합니다.
sum_idx = *num1[i][j] + *num2[i][j];
라고 수정해줬더니 에러가 사라지긴 했는데, 간접접근 연산자 *는 포인터 연산을 통해 값에 접근할때 사용하는 것이므로.. 이 경우 또한 이해가 되질 않습니다ㅠㅠ