なんだとおおお!! sizeof(a)==sizeof(&a)だなんて、そんな馬鹿な!!!! bccで試したらtypeid(a)==typeid(&a)==INT[2][3]だと!そんなアホな!!! The result of unary & operator is a pointer to its operand. って書いてあるだろうが。どこにも特例は出てないぞ!! でてたら誰か教えてくれ!!!
>>254 aは配列オブジェクトですよね。 型でいうとint [2][3]です。つまりサイズは24バイト。 &aは配列全体へのポインタで(ANSI規格より)、型は int (*)[2][3]ですよね。ポインタなんだから、double d に対するsizeof(&d)と同じく4バイトが正しいと思うんです。
>>255 int a[2][3]; --> int [2][3]型 -->配列全体のサイズ int *a[2]; --> int* [2]型 -->ポインタ二つ分のサイズ int **a; --> int **型 -->int*へのポインタのサイズ int (*a)[3]; --> int (*)[3]型 -->配列へのポインタのサイズ
>>347 例外がいくつかあるらしいけど、ISO99の方だと、6.3.2.1の3に書いてあった。 >3 Except when it is the operand of the sizeof operator or the unary & operator, or is a >string literal used to initialize an array, an expression that has type ‘‘array of type’’ is >converted to an expression with type ‘‘pointer to type’’ that points to the initial element of >the array object and is not an lvalue. If the array object has register storage class, the >behavior is undefined. これみると、本の記述じゃなくて処理系が違ってる?ように思えるが・・・ 1993の方は持ってない。
float f1, f2; for (unsigned long u = 0; u != 0xFFFFFFFF; ++u) { int e = (u >> 23) & 0xff; if (e == 0 || e == 0xff) continue; // NaN or Inf memcpy(&f1, &u, sizeof(f1)); // f1 = *(float*) &u; sprintf(.... 以下 >>421 と同じなので略
>>464 おおその通りだ。へたうった。例外はメンバポインタの場合だけだ 3.9.3.5 In this International Standard, the notation {\it cv} (or {\it cv1}, {\it cv2}, etc.), used in the description of Types, represents an arbitrary set of cv-qualifiers,