게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
2차원 배열 함수인자로 주고받는 부분 기초적인 질문있습니다!!
게시물ID : programmer_13907짧은주소 복사하기
작성자 : 감감무소식
추천 : 0
조회수 : 348회
댓글수 : 5개
등록시간 : 2015/10/16 01:34:30
옵션
  • 본인삭제금지
2차원 배열 포인터를 연습하는 과정에서 2차원 배열을 포인터 배열로 인자를 주고 다시 return 받는 함수를 만들었습니다.

#include <stdio.h>

float ( *proc ( float(*mat)[4] ) )[4]
{

float result[4][4];

for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
result[i][j] = mat[i][j];
}
}
return result;

}


void main()
{
float a[4][4] = { 1, 2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16 };
float(*b)[4];

b = proc(a);
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%f ", b[i][j]);
}printf("\n");
}
}

아래는 결과입니다.
result1.png



이때 main함수에서 포인터배열 b를 이제 하나하나 찍어두는데

컴파일도 되고 실행도 되지만 값이 a와 같은 값이 찍히지 않습니다.

그래서 실험을 해보았습니다.

위의 proc함수는 그대로 사용하였으므로

생략하고 실헌한main함수만 기록하겠습니다.

실험 1.


void main()
{
float a[4][4] = { 1, 2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16 };
float(*b)[4];

b = proc(a);
printf("%f \n", b[0][0]); // 각각 따로따로 출력해보았습니다.
printf("%f \n", b[0][1]);
printf("%f \n", b[0][2]);
printf("%f \n", b[0][3]);

}
결과

result2.png

실험 2.

void main()
{
float a[4][4] = { 1, 2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16 };
float(*b)[4];

b = proc(a);
//printf("%f \n", b[0][0]);
printf("%f \n", b[0][1]);  // 0,0을 제외하고 0,1부터 출력해보았습니다.
printf("%f \n", b[0][2]);
printf("%f \n", b[0][3]);


/*
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%f ", b[i][j]);
}printf("\n");
}*/
}

결과

result3.png


이런식으로 b값을 연속적으로 출력하게 되면 첫번째 값을 제외한 나머지 값들이 전부 쓰레기 값이 출력되는것 같습니다.

그래서

주소값을 출력해보았습니다.


void main()
{
float a[4][4] = { 1, 2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16 };
float(*b)[4];

b = proc(a);
printf("%d \n", sizeof(float (*)[4]));  // b의 자료형 크기 출력


for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%p \n", &b[i][j]); // 각 원소의 주소출력
}
}
}

결과

result4.png

이런식으로 주소는 모두 연속적입니다...

아직도 원인을 모르겠어서...이렇게

질문을 남깁니다!!

도와주시면 정말 감사드리겠습니다...!!!!

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호