c 포인터 할당좀 봐주세요...

idididid의 이미지

struct sss
{

int a[2][2][2];

} t_sss;

main ()
{
int ***i;

i = t_sss.a;
}

이렇게 할 수 없나요?

틀렸다면 무엇이 틀린건가요? ㅡㅜ;;

dopesoul의 이미지

저와 같은 경우에는 '.' 연산자 앞의것이 포인터 형과 맞아야하므로
& 가 아닐까요?

죠커의 이미지

int name[][][](array of array of array of int)는 int (*name)[][] pointer to array of array of int로 받는 것만 가능합니다.

배열과 포인터는 동일하지 않습니다.

idididid의 이미지

struct sss
{

int a[2][2][2];

} t_sss;

main ()
{
int *i[2][2];

i[2][2] = &(t_sss.a[0][0][0]);
}

이럼 맞는건가요??

hanzo69의 이미지

배열포인터 부분을 찾아서 공부해보시길 바랍니다.

int main () 
{ 
// 3차원 배열을 row, column, depth 로 나눌때
// 2x2x2 3차원 배열의 1개 row를 받을 수 있는 배열포인터 선언
int (*i)[2][2]; 

i[2][2] = t_sss.a; // 배열 포인터에 a배열의 첫번째 row 대입
} 

님ㅎ 즐~

ㅡ,.ㅡ;;의 이미지

idididid wrote:
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;
쓸데는 필요에따라 다시캐스팅하든지 번지를 직접계산하면되겠지요.


----------------------------------------------------------------------------

doldori의 이미지

hanzo69 wrote:
int main () 
{ 
int (*i)[2][2]; 

i[2][2] = t_sss.a; // error
} 

i = t_sss.a 로 써야 합니다.

ㅡ,.ㅡ;; wrote:

쓸데는 필요에따라 다시캐스팅하든지 번지를 직접계산하면되겠지요.

자연스러운 방법이 있는데도 일부러 캐스팅을 하거나 주소를 직접 계산해야 할 이유는 없습니다.
죠커의 이미지

int main () 
{ 
    int (*i)[2][2]; 
    i = t_sss.a
} 

int *로 접근할 수도 있다는 ㅡ,.ㅡ;;님 말도 근거 있습니다.

가장 정확한 것은 doldori님의 코드입니다.

두번째 idididid님이 시도하신

int *i[2][2]; 

는 array 2 of array 2 of pointer to int가 됩니다. 포인터를 저장하고 있는 배열의 배열이 되는 것이지요.

[]와 ()는 *보다 우선순위가 높습니다. 그래서 위의 소스에서 []가 먼저 읽혀져서 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
를 참고하시는게 좋습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.