へのポインタのアドレスを記憶、私が持っている:は、例えばメモリ
char* a = (char*) malloc(sizeof(char));
char* b = (char*) malloc(sizeof(char*));
私はアドレスb
から始まるメモリにa
のアドレスを取得するにはどうすればよいですか?
へのポインタのアドレスを記憶、私が持っている:は、例えばメモリ
char* a = (char*) malloc(sizeof(char));
char* b = (char*) malloc(sizeof(char*));
私はアドレスb
から始まるメモリにa
のアドレスを取得するにはどうすればよいですか?
はあなたが必要なものに依存します(それは完全には明らかではない)、あなたはb = a
、*b = &a
(あなたがアドレスb
から始まるメモリに、a
のアドレスを尋ねた文字通りのように)、または*b = a
を行うことができます。
* size =(* b)が1バイトであるのに対し、アドレスは4バイト長であるため、b = aは実際にアドレスを格納しません。私が望んでいない最初のこと。 – Stackd
あなたはb
は(あなたがをcharに1つのポインタ用の領域が割り当てられ、あなたのmalloc文を見ることで推定することができるよう)をcharにポインタを指すようにしたい場合は、b
が実際にタイプでなければなりませんポインタへのポインタは、このようなを、charへ:
char* a = (char*) malloc(sizeof(char));
char** b = (char**)malloc(sizeof(char*));
は、私の知る限り理解されるように、何を達成したいことはa
がb
が指している場所に指しているアドレスを割り当てることですか?すなわち、この後、次のようになります。
*b = a;
あなただけではなく、(あなたが実際にb
を宣言した通り)b
がをcharへポインタになりたい、それがa
として同じアドレスを指すようにしたい場合は、そして、この操作を行います。
a
と同じ場所にb
ポイントを作る char* a = (char*)malloc(sizeof(char));
char* b = a;
。しかし、ヒープ上の同じアドレスを指しているだけなので、bのためのスペースを割り当てる必要もありません。あなたはまた、free
a
とb
で指されているスペースだけを注意しなければならないでしょう!
また、ポインタのアイデア(例えば、hereまたはhere)を読むことをお勧めします。
char** b = (char**) malloc(sizeof(char*));
がchar**
代わりのchar*
を使用して:
は私がb
が実際にchar*
を指すように起こっていることから、あなたは本当にこの道を宣言し、それを初期化する必要があり、ということで、これを序文みましょう。あなたはすでにそれを知っているし、まだいくつかの理由でタイプchar*
を持っているb
をしたい場合しかし、あなたはこれを記述します:
char**
であるかのようにあなたが
char*
を保存することができますので、
b
を扱う
*((char**) b) = a;
その中に。
これは私が望むものではありません。bの後のバイトに内容を保存したいと考えています。基本的には、再帰的な構造体が必要です。空きスロットであることを示すポインタが必要です。ポインタの後の内容は、次の空きスロットなどを指す次のポインタを指す必要があります。 – Stackd
なぜこれが必要ですか? – SlavaNov
あなたは何を達成したいですか?ここで何をしているのか(変数bの場合)は、1つの "charへのポインタ"のためのスペースを割り当てて、それをcharへのポインタ型の変数に代入しています。私はあなたが*変数型*とこの変数が*ここにポイントする型を混同していると思います。通常、「charへのポインタ」の概念は、「charへのポインタ」ではなく「char」の値を指しています... – codeling
基本的には、再帰的な構造を持たせたいのですが、ポインタは自由であることを示すために必要ですスロットの後の内容は、次の空きスロットなどを指している次のポインタを指していなければなりません。リンクされたリストのようなものです。 – Stackd