0

私は通常、oracle-pro *c/c++で変数を宣言します

VARCHAR myvar[25];

私のファイルのプリコンパイル後、このように変更されます

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
struct { unsigned short len; unsigned char arr[25]; } myvar;

ステートメントvarcharを使用するときにtypedef が与えられているため、varchar myvar[25]

  1. 構造体の配列を作成しないのはなぜmyvar[25]ですか?
  2. 2 行目の typedef ステートメントはどのようarr[1]に変更されarr[25]ましたか?
4

2 に答える 2

1
  1. myvarmyvar.arr[25]文字と文字列の長さの配列用にメモリを予約するオブジェクトmyvar.lenです。他に何が必要ですか?
  2. それはおそらくstruct hackです。一般的な VARCHAR ポインターを作成するために使用されていると思います。

例:

void PrintVarChar(VARCHAR * vcPtr) {
    for(unsigned short i; i < vcPtr->len; ++i) {
        PrintChar(vcPtr->arr[i]);
    }
}

このように呼び出されます:

PrintVarChar((VARCHAR*)&myvar);
于 2014-03-24T14:20:55.420 に答える