#include
void printmat(int(*mat)[2]) {
printf("%d %d\n%d %d\n", mat[0][0], mat[0][1], mat[1][0], mat[1][1]);
}
int * multmat (int(*mat1)[2], int(*mat2)[2]){
int result[2][2];
result[0][0] = mat1[0][0] * mat2[0][0] + mat1[0][1] * mat2[1][0];
result[0][1] = mat1[0][0] * mat2[0][1] + mat1[0][1] * mat2[1][1];
result[1][0] = mat1[1][0] * mat2[0][0] + mat1[1][1] * mat2[0][1];
result[1][1] = mat1[1][0] * mat2[0][1] + mat1[1][1] * mat1[1][1];
return result;
}
int main(void) {
int mat1[2][2] = { 1, 2, 2, 1 };
int mat2[2][2] = { 1, 0, 0, 1 };
printmat(multmat(mat1, mat2));
return 0;
}
좀 알려달라고
다지우고 다시짜라
야발련아 ㅋㅋㅋ
대가리 나쁜 새끼가 뭔 행렬이노 ㅋㅋㅋㅋ
multimat()의 arg 정의가 이상하다. [][] 인데 []만 정의된 것? 아니면 아예 [] 없이 정의해야 하는 것?
arg가 뭐임>
이차원 배열 반환시키고싶은데 int *이게 아닌것같은데
arg = func( arg1, arg2) 이거.. int result[][]가 local 변수인데, 해당 메모리 포인터를 return 한 후 함수종료하면 해당 메모리 내용은 덮어씌워지는 거 . static으로 선언해야.
오 그렇네 ㄳㄳ
근데 static 안쓰고 하는방법은 없음? 찾아보니까 typedef로 하면 된다는데 저기에 적용시켜보니까 이상하게 되던데
현실에서는 이런 코드 짜지도 않는데,.. 그래도 재미삼아 한 번 알아봐야지..
아...그럼 굳이 안알려줘도 ㄱㅊ 그냥 내가 알아서 찾아볼게
이차원 배열 반환 검색하면 나오긴하는데 어려워보여서 질문한거였음 ㅇㅇ 그거 열심히 해석해볼게
return result 를 return (int *)result; 로 바꿔주고, 나머지 args들도 *표시 없애면 된다
그래고 args 를, (int *)mat1[2] 하지 말고 int mat1[2][2]로 해줘야 함
그거 정확한 방법이 아니라고 해서 그냥 void multmat(mat1, mat2, result) 이런식으로 따로 결과까지 입력시키는걸로 했음 ㅠㅠ ㄳㄳ
시험에 나오는 문제라면 확실히 하고 넘어가는 게 좋을 거다..
차라리 global static으로 함수 밖에 선언 후, return 없이 그냥 해당 static 변수에 직접 대입해 버리면 레알 간단