整数ポインタをインクリメントすると、アドレスが整数のサイズだけ増加します。関数ポインタをインクリメントするとどうなりますか?
user1731828
質問する
1786 次
2 に答える
8
void *
ポインタや不完全型へのポインタと同様に、関数へのポインタでは算術演算は許可されていません。
たとえば、加算演算子に関する C99 §6.5.6 は次のように述べています。
加算の場合、両方のオペランドが算術型を持つか、一方のオペランドがオブジェクト型へのポインターで、もう一方が整数型でなければなりません。(増加は 1 を追加することと同じです。)
関数型はオブジェクト型ではないため、演算子のオペランドとして関数へのポインターを提供すること+
は、この制約に違反します。
C 言語の拡張機能として、GCC コンパイラは、関数へのポインター (および へのポインターvoid
) の算術演算を許可します。これは、ポイント先のオブジェクトのサイズが 1 であるかのように実装します。標準準拠モードでは、そのようなコードに対して警告が発行されることに注意してください。
于 2012-10-31T06:10:27.293 に答える
3
void および関数ポインターでは、ポインター算術は使用できません。
ただし、コンパイラの多くは、コンパイラの拡張機能を介してポインター算術をサポートしています。これは、ボイドまたは関数のサイズを 1 として扱うことによって行われます。
gcc を使用している場合は、次のフラグを使用して、コンパイラに診断を強制的に提供させます。
-Wpointer-arith
于 2012-10-31T06:20:52.807 に答える