c언어 2차원 배열과 포인터 관련 질문입니다..
글쓴이: SonaGius / 작성시간: 일, 2011/06/19 - 1:55오후
소스를 받았는데
void b(float *a){
}
main(){
float a[10][20];
b(a);
}
형태의 소스입니다. 이게 이상이 없는건지가 알고싶고, (비주얼 2005로 테스트 해보니까 안됩니다..)
혹 저게 컴파일러 별로 다르다면 가능한 도구가 무엇인지 알고 싶습니다.
[예상컨데 Turbo C로 작성된 프로그램 같습니다만, Turbo C로는 에러는 없는데 프로그램이 올바르게 수행되지 않습니다.]
긴 글 읽어주셔서 감사합니다!
Forums:
어라.. 글이 3개나 올라왔네..
어떻게 지우지요..?
일단 C 기초부터 공부하시고 소스를 보시길. a 의
일단 C 기초부터 공부하시고 소스를 보시길.
a 의 배열 원소가 float 라는 이야기고, a 는 배열 시작 주소로서 정수꼴이 되어야 함.
문법이 아닌 프로그램 로직 문제일 듯.
문법이 아닌 프로그램 로직 문제일 듯.
C는 형변환하면 뭐든지 가능하기 때문에 함수 b안에서
C는 형변환하면 뭐든지 가능하기 때문에 함수 b안에서 구체적으로 저 포인터로 뭘하고 있는지 알아야 합니다.
임의의 포인터간의 형변환이므로 일반적으로는 올바르지 않은 코드가될 가능성이 높지만,
안에서 적당하게 또 변환해서 쓰고 있거나 단순히 참조용으로만 쓰고 있거나 하다면 문제가 안될수도 있구요.
답변 달아주셔서 감사합니다..!!
문법에는 이상이 없다는 말씀이시군요..!!
오히려 문법에 문제가 있고 실질적으로는 어차피 해당
오히려 문법에 문제가 있고
실질적으로는 어차피 해당 위치에 float형 객체가 있기 때문에 문제가 안생기는 경우입니다.
pointer to array of float는 pointer to float와 서로 호환되는 타입이 아니기 때문에
컴파일 시에 경고나 에러가 발생해야 맞습니다.
만약 컴파일은 되는데 실행중 문제가 생긴다면,
배열의 범위를 넘어 할당되지 않는 공간에 접근하는 경우거나 혹은
저게 문제가 아니라 다른 곳에 문제가 있는 것입니다.
,....
a[x][0] = *(a+20*x)[0]
a[x][y] = **(a+20*x+y)
이런식일걸요? 아 헷갈려라...
함수 b() 의 argument 문제.
void b(float **a){
// life is slow
}
----
오늘도 행복한 하루~
@from caesar
이분 큰일날 분이시네... pointer to
이분 큰일날 분이시네...
pointer to array of... 하고 pointer to pointer to ... 는 서로 다릅니다.
함수의 매개변수에서 array of... 가 pointer to... 로 자동변환되는건 가장 상위 한단계 뿐이라는거 명심하시길.
그러네요.ㅋㅋ; 예전에도 이거 해깔려서 고생했던
그러네요.ㅋㅋ;
예전에도 이거 해깔려서 고생했던 기억이 나는군요.
----
오늘도 행복한 하루~
@from caesar
함수의 인자 문제
아님
아님
너무 많은 분들이 답글 달아주셨네요!! 감사드립니다
너무 늦게 찾아왔지만.. 감사드립니다!!
댓글 달기