どのC関数にも、すでに宣言されたポインタはありますが、まだ値が割り当てられていないとしましょう。我々の例ではintとする。固定サイズの配列へのCの既存のポインタ
int *ptr;
機能の目標は、ptr
ヒープ上の任意の動的メモリ、そういないmalloc
コールを割り当てることではありません。代わりに、固定サイズの配列n
を指し示すようにします。私はそうのようにこれを実現することができ知っている:
int arr[n];
ptr = arr;
我々は関数の中で、この何回も行う必要がある場合は、コードは非常に読み厄介とハード得ることができる、すなわち、多くのポインタフィールドの構造体すべての必要性固定長の配列を指す。これを1行で実現するためのより良い方法はありますか? (言わない
int *ptr;
// Many other things happen in between...
ptr[n];
*** EDIT ***
ここでは、以下の追加情報がいくつかのより多くの答えを導く助けるかもしれない:私は以下のようなものを考えて、それはあまりにも曖昧と互換性のないに見えました現在の回答はうまくいきません)。私の使用例では、ポインタは構造体で宣言されており、関数ではポインタを配列に代入しています。私は(すべてのポインタは、固定長の配列を指すように)以下のコードに比べてこれを達成する簡単な方法があるかどうかを知りたい:
struct foo {
int* a;
short* b;
char* c;
...
};
void func(void) {
struct foo f;
int n = ...;
int tempArr1[n];
f.a = tempArr1;
short tempArr2[n];
f.b = tempArr2;
char tempArr3[n];
f.c = tempArr3;
...
}
これはあいまいではありません。実行時やコンパイル時にメモリが割り当てられていないと、メモリに障害が発生します。 – Hogan
なぜ 'ptr'が必要ですか?単に 'arr'を直接使用するのはなぜですか? –
@JamesMcLaughlin - 彼は見た目が好きではありません。 – Hogan