11

C++に入るだけです。*変数の間接参照を示すために乗算()の記号が使用されているのを見ると、常に軌道から外れています。

例えば: unsigned char * pixels = vidgrabber.getPixels();

これは他の人を捨てますか?これを回避するためのヒントは何ですか?

ありがとうございました。


ps私は別のかなり単純な質問がありますが、答えられませんでした:(ここ:初心者の質問:その値だけでなく、値に加算/減算してください!そしてお時間をいただきありがとうございます!

4

7 に答える 7

24

C、および継承C ++は、演算子で溢れ、本質的にコンテキスト依存です。あなたはそれに慣れる必要があります:

宣言(または定義)されている変数の名前の前に*表示される場合、それは型修飾子であり、その変数をポインターにします。式の一部である変数の単項接頭演算子である 場合は、間接参照(またはオーバーロードされているもの)です。式の一部である2つの変数のバイナリ中置演算子で ある場合、それは乗算(またはオーバーロードされているもの)です。

*(これから、 inunsigned char * pixelが逆参照単項接頭辞ではなく、型修飾子であることがわかります。)

&に非常に似ていることに注意してください*。意味が異なるだけです。変数を参照にし、address-of演算子、またはバイナリANDです。

于 2010-08-18T18:16:06.753 に答える
8

独自のコードを作成する際の1つの推奨事項は、ポインター/derefとして使用するときに*を「抱きしめる」ことです。

unsigned char *pixels = ...

if (*pixels == ...)

乗算として使用する場合は、*の間隔を空けます。

int y = x * 7;

使用できる他の手がかりがあります(たとえば、ポインターderefが単項演算子であり、複数が二項演算子であるという事実など)。

于 2010-08-18T18:16:20.470 に答える
2

答えは:練習です。すべての新しいプログラミング言語はある程度面白く見えますが、他の言語よりも面白いものもあります。それを使うことを学びなさい、そうすればそれは自然になるでしょう。

于 2010-08-18T18:17:02.637 に答える
1

間接参照演算子と乗算演算子は、通常、乗数演算子の左側に型名がないという事実によって区別できます。

于 2010-08-18T18:15:52.433 に答える
1

考案された例

あなたはCで間接参照について書きました。見ただけで結果がわかりますか?==>

int v[] = {5,6}, w[] = {7,8};
int m[][2] = { {1,2}, {3,4} };

int result = * v * * * m * * w;

よろしく

rbo

于 2010-08-18T18:30:06.163 に答える
1

同じように、英語を話す人は、同じ単語が文脈に応じて異なる意味を持つ可能性があるという事実を回避します。コンテキストにある程度没頭すると、通常、オペレーターが何をしているかが明らかになります。

于 2010-08-18T18:51:41.863 に答える
1

他の言語と比較してCについて注意すべき重要な点は、複数の宣言が1つのステートメントに結合されている場合、アスタリスクはセット全体ではなく、個々の項目に適用されることです。例えば:

int * foo、bar;

fooと呼ばれるintポインターと、barと呼ばれるintを作成します。私は常にアスタリスクを変数に固定し、1つのステートメントでポインターと非ポインターを混在させないようにします。

int * foo;
int * ptr1、* ptr2、* ptr3;
int bar、boz、baz;

また、「const」や「volatile」などのストレージクラス修飾子は、期待どおりにバインドされるとは限らないことに注意することも重要です。ステートメント

volatile int * foo;
'foo'が揮発性であることを意味するのではなく、'foo'が指すものが揮発性であることを意味します。foo自体が「揮発性」のものである場合、「int*volatilefoo;」と書く必要があります。

于 2010-08-18T19:00:25.697 に答える