c언어 2차원 배열과 포인터 관련 질문입니다..

SonaGius의 이미지

소스를 받았는데

void b(float *a){

}

main(){
float a[10][20];
b(a);
}

형태의 소스입니다. 이게 이상이 없는건지가 알고싶고, (비주얼 2005로 테스트 해보니까 안됩니다..)

혹 저게 컴파일러 별로 다르다면 가능한 도구가 무엇인지 알고 싶습니다.

[예상컨데 Turbo C로 작성된 프로그램 같습니다만, Turbo C로는 에러는 없는데 프로그램이 올바르게 수행되지 않습니다.]

긴 글 읽어주셔서 감사합니다!

SonaGius의 이미지

어떻게 지우지요..?

익명 사용자의 이미지

일단 C 기초부터 공부하시고 소스를 보시길.
a 의 배열 원소가 float 라는 이야기고, a 는 배열 시작 주소로서 정수꼴이 되어야 함.

ifree의 이미지

문법이 아닌 프로그램 로직 문제일 듯.

klyx의 이미지

C는 형변환하면 뭐든지 가능하기 때문에 함수 b안에서 구체적으로 저 포인터로 뭘하고 있는지 알아야 합니다.
임의의 포인터간의 형변환이므로 일반적으로는 올바르지 않은 코드가될 가능성이 높지만,
안에서 적당하게 또 변환해서 쓰고 있거나 단순히 참조용으로만 쓰고 있거나 하다면 문제가 안될수도 있구요.

SonaGius의 이미지

문법에는 이상이 없다는 말씀이시군요..!!

익명 사용자의 이미지

오히려 문법에 문제가 있고
실질적으로는 어차피 해당 위치에 float형 객체가 있기 때문에 문제가 안생기는 경우입니다.

pointer to array of float는 pointer to float와 서로 호환되는 타입이 아니기 때문에
컴파일 시에 경고나 에러가 발생해야 맞습니다.

만약 컴파일은 되는데 실행중 문제가 생긴다면,
배열의 범위를 넘어 할당되지 않는 공간에 접근하는 경우거나 혹은
저게 문제가 아니라 다른 곳에 문제가 있는 것입니다.

hiseob의 이미지

a[x][0] = *(a+20*x)[0]
a[x][y] = **(a+20*x+y)

이런식일걸요? 아 헷갈려라...

revival의 이미지

void b(float **a){
// life is slow
}

----
오늘도 행복한 하루~
@from caesar

익명 사용자의 이미지

이분 큰일날 분이시네...

pointer to array of... 하고 pointer to pointer to ... 는 서로 다릅니다.

함수의 매개변수에서 array of... 가 pointer to... 로 자동변환되는건 가장 상위 한단계 뿐이라는거 명심하시길.

revival의 이미지

그러네요.ㅋㅋ;
예전에도 이거 해깔려서 고생했던 기억이 나는군요.

----
오늘도 행복한 하루~
@from caesar

익명 사용자의 이미지

void b(float a[][20]){
// life is sadness
}
라고 하는게 제일 편하고...

아님

void b(float (*a)[20]){
// life is sadness
}
라고 하는건 한글자 더 쳐야되고 읽기측면에서도 더 좋지도 않고

아님

main(){
b(a[0]);
}
의도에 따라선 함수는 그냥 두고 이런식으로 사용할 수도...

SonaGius의 이미지

너무 늦게 찾아왔지만.. 감사드립니다!!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.