このステートメントとステートメントに遭遇したときにコンパイラが何をするかを理解したいです((double*)0+1)
。
質問する
139 次
2 に答える
3
はポインター型であるためdouble *
、リテラル値0
をNULL
ポインターに伝達し、ポインター演算の規則に従って、その値に 1 を追加します (したがって、数値的には、結果は になりますNULL + sizeof(double)
)。
于 2013-04-04T08:54:01.027 に答える
0
何もありません... 0 (定義により、NULL
ポインター) を へのポインターにキャストしていますdouble
。おそらく次のようなことを言います。
double *ptr;
....
ptr = ((double *) 0);
....
ptr = NULL; /* Idiomatic */
ptr = 0; /* Also allowed, for lazy fingers */
上記の 3 つの割り当てはすべて、まったく同じことを行います。
ポインター値のキャストが 0 でない限り、めちゃくちゃにならないように特に注意する必要があります。ほとんどのポインタ キャストは、未定義の動作を要求しています。それらは、現在のマシンの最新のコンパイラで「動作」し、1 年以内に耳をふさいでしまう可能性があります。
于 2013-04-04T17:57:00.920 に答える