VC++のsizeof演算子のVS2003とVS2005での動作の違い
|
新システムで VC++ 2003 から VC++ 2005 への移行を行っていて、テストでエラーになったために分かったのだが、VC++ 2003 と VC++ 2005 でsizeof演算子の挙動に違いがある。 |
[ リスト ]
|
新システムで VC++ 2003 から VC++ 2005 への移行を行っていて、テストでエラーになったために分かったのだが、VC++ 2003 と VC++ 2005 でsizeof演算子の挙動に違いがある。 |
【
シ
g| 今日 | 全体 | |
|---|---|---|
| 訪問者 | 2 | 1362 |
| ブログリンク | 0 | 0 |
| コメント | 0 | 7 |
| トラックバック | 0 | 0 |
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 |
登録されていません
開設日: 2010/1/3(日)
はじめまして。
たまたまこの記事を拝見し、興味深かったので少し調べてみました。
Cの規格書を持っているわけではないので、
http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
を参照したところ、6.5.3.2 アドレス及び間接演算子の部分に、
「単項&演算子は,そのオペランドのアドレスを返す。オペランドが型“〜型”をもっている場合,結果は,型“〜型へのポインタ”をもつ。」
とありますので、上の&aや&abc[0]はchar(*)[10]の型をもつと考えられます。
どちらもポインタですので、32ビット環境では4バイトとなると思います。
2010/1/25(月) 午前 1:15 [ bre*z*_o*a ]
コメントありがとうございます。
VC++2005の動作はご指摘の通り納得の行く結果なのですが、VC++2003の動作が納得出来ないことと、納得出来ない動作を元に作られたコードが現存していることが問題です。
2010/1/28(木) 午前 2:14 [ maatin ]