2017-01-30 27 views
0

私はポインターを理解するのがちょっと新しいので、ポインターの働きについて正しい考えを持っているかどうかを誰かが確認できることを願っていました。私は、ポインタが何であるかのアイデアを簡素化しようとするとどのように私はfunctAにこのアドレスを送信するとき関数から関数へのポインタの受け渡し

functA(int *numb){ 

functB(numb); 

} 

functB(int *numb){ 

functC(numb); 

} 

functC(int *numb){ 

*numb+=1; 

} 

int main(){ 

int testNumber = 0; 

functA(&testNumber); 
. 
. 
. 
} 

だからメインに、私はそうFUNCT AにtestNumberのアドレスを送信していますそれらを使用しますよ問題はない、正しい?

funct Aにはアドレスを保持できるポインタパラメータがあるため、アドレスを送信すると問題にはなりません。そして、numb(functA内)はポインタなので、functBはアドレスを受け入れることができるので、functBに送ることができます。また、私はまだtestNumberと同じアドレスを送信していますが、正しいですか?

また、私はfunctCとfunctCに麻痺を送りますが、私はこの位置をデレンプンしています(これを言う良い方法がありますか?)そしてカウントを1だけ増やします。これが完了すると、testNumber 1、正しいはずですか?

私はこれが馬鹿に聞こえるかもしれないと知っていますが、私はこれを概念的に把握しようとしています。私はちょうど私が提出したプロジェクト(これを行ったが、それは長すぎた)でこのダウンコンセプトを取得しようとするよりも多くの時間を費やした

+0

ポインタで 'testNumber'を変更するコードが動作しているようですが、' testNumber'の値は 'functA(&testNumber)'呼び出しの後に1になります。 'その行の最後に – VolAnd

+0

新しいCプログラマにとってポインタは常に難しいです。 *の横にある値は、それがなければアドレスであることを覚えておいてください。別の関数へのポインタを渡して、_address_を渡したい場合は、スターなしで変数名を渡します。受信関数の変数には星が必要です。値を渡すときは逆です(受信関数もポインタにしたくない場合)。これらのルールには例外がありますが、memcpyなどを書き直さない限り、あなたが心配する必要があることは非常に疑問です; – Aurelius

+0

@VolAndああ、ありがとうございます。今すぐ修正する – Woff

答えて

0

変数は、メモリ内の場所に格納され、そこに格納された値を有しています。すべての場所に住所があります。

variable

location_value

location_address

ポインタは、(例えば、int *p)単に他の変数(例えば、int a;)のような変数です。差異は、ポインタがあなたがすでに知っているある場所の住所を格納していることです。

variable: int testNumber = 10;

location_value: 10

location_address: 0xABCD000 // <-- 'testNumber' is stored at this location

----------------------------

variable: int *numb = &testNumber;

location_value: 0xABCD000 // <-- note: value of 'numb' is an address, address of 'testNumber'

location_address: 0x1234000 // <-- numb itself is stored at 0x12340000

numbは変数であるため、その値を同じタイプの他の変数に代入することができます。

あなたの場合functC::numb = functB::numb = functA::numb = &testNumber = 0xABCD000どちらが正しい。

*functC::numbを逆参照すると、アドレスfunctC::numbに格納されている変数にアクセスしています(testNumber)。あなたがしたときにtestNumberがインクリメントされます*functC::numb += 1;

2

この投稿には多すぎる質問。あなたがを正確に理解している限り、の住所は、あなたが満足するでしょう。しかし、あまりにも多くのポインタは、いくつかのバグを引き起こす可能性があります、それに注意してください。

このアドレスをfunctAに送信すると問題はありませんが、正しいですか?

はい

FUNCT Aはアドレスを保持することができ、ポインタパラメータを、持っているので、私はアドレスを送信するとき、それは は右、問題に遭遇しないのだろうか?

はい

また、私はまだ が正しい、testNumberはである同じアドレスを送信していますか?

はい

.....これを言うために良い方法はありますか?)

ないとはい、それは要件に依存します。

これが完了したら、testNumberは1でなければなりません。正しいですか?

はい

+0

この部分を詳しく説明できますか?いいえ、はい、それは要件に依存していますか? – 4386427

+0

@ 4386427私はできれば、そうすることはできません。猫の皮膚には複数の方法があります。他の方法はより論理的/読みやすいですが、私たちは現在のOPの投稿を教えてもらえません。 – P0W

関連する問題