2011-12-16 16 views
1

へのポインタのアドレスを記憶、私が持っている:は、例えばメモリ

char* a = (char*) malloc(sizeof(char)); 
char* b = (char*) malloc(sizeof(char*)); 

私はアドレスbから始まるメモリにaのアドレスを取得するにはどうすればよいですか?

+2

なぜこれが必要ですか? – SlavaNov

+2

あなたは何を達成したいですか?ここで何をしているのか(変数bの場合)は、1つの "charへのポインタ"のためのスペースを割り当てて、それをcharへのポインタ型の変数に代入しています。私はあなたが*変数型*とこの変数が*ここにポイントする型を混同していると思います。通常、「charへのポインタ」の概念は、「charへのポインタ」ではなく「char」の値を指しています... – codeling

+0

基本的には、再帰的な構造を持たせたいのですが、ポインタは自由であることを示すために必要ですスロットの後の内容は、次の空きスロットなどを指している次のポインタを指していなければなりません。リンクされたリストのようなものです。 – Stackd

答えて

1

*b = aを実行できませんでしたか?あるいは私はその質問を誤解していますか?

+0

'* a =&b' –

+0

' * b = a'はものを切り捨てませんか? – cnicutar

+0

しかし、彼はポインタメモリの場所(a)をb(* b)の指し示す場所に置く必要がありますか?だから '* b = a;'良い点、それは切り捨てられるかもしれません。それをテストする時間! – SuperTron

1

はあなたが必要なものに依存します(それは完全には明らかではない)、あなたはb = a*b = &a(あなたがアドレスbから始まるメモリに、aのアドレスを尋ねた文字通りのように)、または*b = aを行うことができます。

+0

* size =(* b)が1バイトであるのに対し、アドレスは4バイト長であるため、b = aは実際にアドレスを格納しません。私が望んでいない最初のこと。 – Stackd

1

あなたはbは(あなたがをcharに1つのポインタ用の領域が割り当てられ、あなたのmalloc文を見ることで推定することができるよう)をcharにポインタを指すようにしたい場合は、bが実際にタイプでなければなりませんポインタへのポインタは、このようなを、charへ:

char* a = (char*) malloc(sizeof(char)); 
char** b = (char**)malloc(sizeof(char*)); 

は、私の知る限り理解されるように、何を達成したいことはabが指している場所に指しているアドレスを割り当てることですか?すなわち、この後、次のようになります。

*b = a; 

あなただけではなく、(あなたが実際にbを宣言した通り)bをcharへポインタになりたい、それがaとして同じアドレスを指すようにしたい場合は、そして、この操作を行います。

aと同じ場所にbポイントを作る
char* a = (char*)malloc(sizeof(char)); 
char* b = a; 

。しかし、ヒープ上の同じアドレスを指しているだけなので、bのためのスペースを割り当てる必要もありません。あなたはまた、freeabで指されているスペースだけを注意しなければならないでしょう!

また、ポインタのアイデア(例えば、hereまたはhere)を読むことをお勧めします。

char** b = (char**) malloc(sizeof(char*)); 

char**代わりのchar*を使用して:

1

は私がbが実際にchar*を指すように起こっていることから、あなたは本当にこの道を宣言し、それを初期化する必要があり、ということで、これを序文みましょう。あなたはすでにそれを知っているし、まだいくつかの理由でタイプchar*を持っているbをしたい場合しかし、あなたはこれを記述します:

それは char**であるかのようにあなたが char*を保存することができますので、 bを扱う
*((char**) b) = a; 

その中に。

+0

これは私が望むものではありません。bの後のバイトに内容を保存したいと考えています。基本的には、再帰的な構造体が必要です。空きスロットであることを示すポインタが必要です。ポインタの後の内容は、次の空きスロットなどを指す次のポインタを指す必要があります。 – Stackd