-1

この声明を理解するのを手伝ってください:

static int  ** volatile ptr

このポインターステートメントを分析する方法を教えてください。

4

2 に答える 2

2

staticこれは静的変数であることを意味します-関数内のローカル変数のソースコード内のコピーは1つだけであり、グローバルのモジュール間で共有されません。

int **ptrは、ptr が へのポインタへのポインタであることを意味しますint

volatileの右側にある*ということは、ポインター自体が揮発性であり、ポイントされた値ではないことを意味します。volatile は、この変数へのすべてのアクセスが実際のメモリ操作である必要があり、ほとんどの最適化が許可されないことを意味します。

于 2012-11-22T12:49:01.477 に答える
0

マーカーを挿入した後にタイトル テキストに対処するには: 4(static int 3( * 2( * 1(volatile ptr)))。

1: プログラムが認識できない理由で、実行時に自由に変更できる変数。一般的な原因は、他のスレッド、シグナルまたは他のイベント、および実際にはハードウェア コントローラーである「メモリ」へのポインターなどです。このような変更で失敗する可能性があるコードをコンパイラー/オプティマイザーが発行するのを停止します。

2: このメモリへの揮発性ポインタ。指されているものは揮発性ではありません。

3: ポインターへのポインター、またはポインターの配列。char **argv; を考えてみてください。繰り返しますが、揮発性ではありません。

4: 静的: これは、宣言のどこにあるかによって異なります。

  • 関数の外側: ptr 値はコンパイル スコープのみを持ちます。
  • 関数内: メモリは、関数へのすべての呼び出しおよび/またはスレッドによって共有されます。コンパイル時に一度だけ割り当てられます。

興味深い: const volatile は、外部の影響によってポインターが変更される可能性があることを示しますが、ソフトウェアでは変更できません。

于 2012-11-22T13:06:11.367 に答える