-1

関数で入力を取りたいのですが、情報を保存したいです。名前がなく、ポインターによってのみアクセスできる変数を宣言する方法はありますか?

このようなもの:

float* = float NULL 5;

ありがとう。

編集:私がする必要があったのは、非常に大量の int を格納する無限の量の配列を持つことでした。ただし、このすべてのデータをファイルからロードしているため、他の多くのクラスからアクセスする必要があります。関数が何回実行されるかはわかっているので、それらを配列に保持できますが、int がいくつあるか、または読み込まれる可能性があるかはわかりません

したがって、ポインターは後で使用するために配列に格納されるため、名前を付ける必要はありません。グローバル変数を複数回作成し、配列からアクセスできるようにしたかっただけです。

4

8 に答える 8

2

答えはノーだ。変数にメモリを割り当てる必要があります。

関数 (値を返す) がメモリを割り当てるか、呼び出し元の関数を割り当てる必要があります。

しかし、あなたがやろうとしていることは、C 構文にさえ適合していません。

于 2012-11-06T13:03:08.760 に答える
0

簡単な答えはNOです!では、なぜこのばかげたことをしたいのですか?

于 2012-11-06T13:02:18.403 に答える
0

いいえ。他の方法では使用していない名前を発明できます。

 float myFloatINTERNAL_DONTUSE;
 float * const myFloat = &myFloatINTERNAL_DONTUSE;

しかし、何のために?通常のローカル変数を宣言するだけで、&そのアドレスが必要なときに演算子を使用できます。

于 2012-11-06T13:03:50.397 に答える
0

はい、できます。

float* p = malloc(sizeof(*p)); 

名前付きポインター変数を使用しますpが、それが指すオブジェクトには名前がありません。free後で思い出に忘れないでください。

于 2012-11-06T13:03:50.437 に答える
0

さて、あなたはヒープから新しいメモリを割り当てmalloc()、そこに何かを保存することができます. それはおそらくあなたが望むものです.関数はポインタを返し、それを他の関数に渡すことができます. データが不要になったら、 で割り当てを解除する必要がありますfree()

于 2012-11-06T13:02:10.837 に答える
0

いいえ、C標準(明らかにコンパイラも)は名前のない変数をサポートしていません。何かのポインターを宣言するときは、名前も付けなければなりません。
さて、合理的に、そこでやりたいことは、ヒープに変数を作成し、名前を持つポインターでそれにアクセスすることです。

float * const ptr = malloc(sizeof(float));

というわけで、どうぞ。

于 2012-11-06T13:04:48.707 に答える
0

それを行う方法があったとします。

名前を使わずにどのように変数にアクセスしますか?

ポインターでさえ「名前付きポインター変数」です:-)

于 2012-11-06T13:06:49.863 に答える
0

動的に割り当てられたオブジェクト (malloc を使用して作成) に加えて、C99 複合リテラルからもサポートされています。

たとえば、以下のような構築

char **foo = (char *[]) { "x", "y", "z" };

またはあなたの目的のために

float *ptr = (float[]){5};

配列を構築し、実際にはオブジェクト名自体を持たずにそれへのポインタしかありません。

于 2012-11-06T13:08:25.447 に答える