struct sss {
int a[2][2][2];
} t_sss;
main () { int ***i;
i = t_sss.a; }
이렇게 할 수 없나요?
틀렸다면 무엇이 틀린건가요? ㅡㅜ;;
저와 같은 경우에는 '.' 연산자 앞의것이 포인터 형과 맞아야하므로 & 가 아닐까요?
int name[][][](array of array of array of int)는 int (*name)[][] pointer to array of array of int로 받는 것만 가능합니다.
배열과 포인터는 동일하지 않습니다.
- 죠커's blog / HanIRC:#CN
main () { int *i[2][2];
i[2][2] = &(t_sss.a[0][0][0]); }
이럼 맞는건가요??
배열포인터 부분을 찾아서 공부해보시길 바랍니다.
int main () { // 3차원 배열을 row, column, depth 로 나눌때 // 2x2x2 3차원 배열의 1개 row를 받을 수 있는 배열포인터 선언 int (*i)[2][2]; i[2][2] = t_sss.a; // 배열 포인터에 a배열의 첫번째 row 대입 }
님ㅎ 즐~
struct sss { int a[2][2][2]; } t_sss; main () { int *i[2][2]; i[2][2] = &(t_sss.a[0][0][0]); } 이럼 맞는건가요??
어디다 쓰려는지는 모르겠으나. 번지만 기억하면될겁니다. int *i; i = (int *)t_sss.a; 쓸데는 필요에따라 다시캐스팅하든지 번지를 직접계산하면되겠지요.
----------------------------------------------------------------------------
int main () { int (*i)[2][2]; i[2][2] = t_sss.a; // error }
쓸데는 필요에따라 다시캐스팅하든지 번지를 직접계산하면되겠지요.
int main () { int (*i)[2][2]; i = t_sss.a }
int *로 접근할 수도 있다는 ㅡ,.ㅡ;;님 말도 근거 있습니다.
가장 정확한 것은 doldori님의 코드입니다.
두번째 idididid님이 시도하신
int *i[2][2];
[]와 ()는 *보다 우선순위가 높습니다. 그래서 위의 소스에서 []가 먼저 읽혀져서 array of ...이 되는 것입니다. 우리가 원하는 것은 제일 먼저 pointer to가 위치하는 것입니다. 그러니
int (*i)[2][2];
"array of array of array of..." 와 같이 중첩되는 배열이 있는 경우 제일 앞쪽의 "array of"만 "pointer to"로 바꾸면 된다고 생각하시면 됩니다.
자세한 내용은 cinsk님이 기록하신 문서http://wiki.kldp.org/wiki.php/CLangaugeComplexDeclaration 를 참고하시는게 좋습니다.
텍스트 포맷에 대한 자세한 정보
<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]
에러는 뭐라고 나는지...
저와 같은 경우에는 '.' 연산자 앞의것이 포인터 형과 맞아야하므로
& 가 아닐까요?
int name[][][](array of array of array o
int name[][][](array of array of array of int)는 int (*name)[][] pointer to array of array of int로 받는 것만 가능합니다.
배열과 포인터는 동일하지 않습니다.
- 죠커's blog / HanIRC:#CN
struct sss{int a[2][2][2];} t_
struct sss
{
int a[2][2][2];
} t_sss;
main ()
{
int *i[2][2];
i[2][2] = &(t_sss.a[0][0][0]);
}
이럼 맞는건가요??
배열포인터로 받으세요.
배열포인터 부분을 찾아서 공부해보시길 바랍니다.
님ㅎ 즐~
[quote="idididid"]struct sss{int a
어디다 쓰려는지는 모르겠으나.
번지만 기억하면될겁니다.
int *i;
i = (int *)t_sss.a;
쓸데는 필요에따라 다시캐스팅하든지 번지를 직접계산하면되겠지요.
----------------------------------------------------------------------------
[quote="hanzo69"][code:1]int main (
i = t_sss.a 로 써야 합니다.
자연스러운 방법이 있는데도 일부러 캐스팅을 하거나 주소를 직접 계산해야 할 이유는 없습니다.
[code:1]int main () {
int *로 접근할 수도 있다는 ㅡ,.ㅡ;;님 말도 근거 있습니다.
가장 정확한 것은 doldori님의 코드입니다.
두번째 idididid님이 시도하신
는 array 2 of array 2 of pointer to int가 됩니다. 포인터를 저장하고 있는 배열의 배열이 되는 것이지요.
[]와 ()는 *보다 우선순위가 높습니다. 그래서 위의 소스에서 []가 먼저 읽혀져서 array of ...이 되는 것입니다. 우리가 원하는 것은 제일 먼저 pointer to가 위치하는 것입니다. 그러니
가 맞는 것입니다.
"array of array of array of..." 와 같이 중첩되는 배열이 있는 경우 제일 앞쪽의 "array of"만 "pointer to"로 바꾸면 된다고 생각하시면 됩니다.
자세한 내용은 cinsk님이 기록하신 문서
http://wiki.kldp.org/wiki.php/CLangaugeComplexDeclaration
를 참고하시는게 좋습니다.
- 죠커's blog / HanIRC:#CN
댓글 달기