メモ書き C言語

2007/03/02
■2次元配列を関数に渡して使う

まずは1次元。

ソース

#include <stdio.h>

void func( char *p )
{
    printf( "*(p+3) = %d\n", *(p+3) );
    printf( "p[3]   = %d\n", p[3] );
}

void main( void )
{
    char buf[8] = {0,1,2,3,4,5,6,7};

    func( buf );
}


実行結果

*(p+3) = 3
p[3]   = 3


次、2次元。

ソース

#include <stdio.h>

void func( char (*p)[8] )
{
    printf( "*((*(p+1))+3) = %d\n", *((*(p+1))+3) );
    printf( "p[1][3]       = %d\n", p[1][3] );
}

void main( void )
{
    char buf[][8] = {{0,1,2,3,4,5,6,7},{10,11,12,13,14,15,16,17}};

    func( buf );
}


実行結果

*((*(p+1))+3) = 13
p[1][3]       = 13



ついでに。

ソース

#include <stdio.h>

void func( char (*p)[8] )
{
    printf( "*((*(p+1))+3) = %d\n", *((*(p+1))+3) );
    printf( "p[1][3]       = %d\n", p[1][3] );

    printf( "p       %d %x\n", sizeof(p), p );
    printf( "*p      %d %x\n", sizeof(*p), *p );
    printf( "**p     %d %x\n", sizeof(**p), **p );
    printf( "p[0]    %d %x\n", sizeof(p[0]), p[0] );
    printf( "p[1][3] %d %x\n", sizeof(p[1][3]), p[1][3] );
}

void main( void )
{
    char buf[][8] = {{0,1,2,3,4,5,6,7},{10,11,12,13,14,15,16,17}};

    func( buf );
}


実行結果

*((*(p+1))+3) = 13
p[1][3]       = 13
p       4 12ff7c
*p      8 12ff7c
**p     1 0
p[0]    8 12ff7c
p[1][3] 1 d