構造体へのポインタ配列、適用
1591 ワード
配列ポインタとポインタ配列の違いは小さく見えますが、結果は千差万別です.
配列ポインタ:struct param(*p)[100]
p+1の結果,アドレスは100個のsizeof(struct param)増大し,二次元配列の位置をインデックス化するのによく用いられる.
ポインタ配列:struct param*p[100]
ここでは100個のstruct paramポインタの配列が作成され、p+1は配列内の次のstruct paramを指し、下付きスケールで縮図することができる:p[1]
ポインタ配列の役割は,秩序正しく格納されていないデータを管理するために存在するのだろうが,何らかのインデックス手法でデータを集約してプログラム統一処理を行う.
ポインタ配列を使用して、関数にデータを埋め込む方法を示します.
配列ポインタ:struct param(*p)[100]
p+1の結果,アドレスは100個のsizeof(struct param)増大し,二次元配列の位置をインデックス化するのによく用いられる.
ポインタ配列:struct param*p[100]
ここでは100個のstruct paramポインタの配列が作成され、p+1は配列内の次のstruct paramを指し、下付きスケールで縮図することができる:p[1]
ポインタ配列の役割は,秩序正しく格納されていないデータを管理するために存在するのだろうが,何らかのインデックス手法でデータを集約してプログラム統一処理を行う.
ポインタ配列を使用して、関数にデータを埋め込む方法を示します.
#include
#include
struct param{
int num;
int tempnum;
char *buff;
};
struct param params[6];
char* buff1 = "buff1";
char* buff2 = "buff2";
char* buff3 = "buff3";
char* buff4 = "buff4";
char* buff5 = "buff5";
char* buff6 = "buff6";
int init()
{
params[0].num = 1;
params[0].buff = buff1;
params[1].num = 2;
params[1].buff = buff2;
params[2].num = 3;
params[2].buff = buff3;
params[3].num = 4;
params[3].buff = buff4;
params[4].num = 5;
params[4].buff = buff5;
params[5].num = 6;
params[5].buff = buff6;
return 0;
}
int test(struct param **args)
{
args[0] = ¶ms[2];
printf("addr0 = %ld
",&args[0]); //
args[1] = ¶ms[4];
printf("addr1 = %ld
",&args[1]); //
}
int main()
{
struct param (*p)[100];
printf("param addr0 = %p
",&p); //
printf("param addr1 = %p
",&p+1); //
init();
test( (struct param**) &p);
printf("%d: %s
",p[1]->num, p[1]->buff);
return 0;
}