以下のようなプログラムがあったときに・・・
int vc[5];
printf("&vc[0] = %p\n", &vc[0] );
printf("&vc[1] = %p\n", &vc[1] );
printf("&vc[2] = %p\n", &vc[2] );
printf("&vc[2]-&vc[0] = %p\n", &vc[2]-&vc[0] );
最後のprintfの結果が2と出ます。
&が付くとアドレスを表示すると思うのですが、アドレス同士の引算だと答えは2にはなりませんよね?
これは要素の離れている差を表していると思うのですが、なぜアドレスの減算にならずにこのような結果になるのでしょうか?
またアドレスの差を求める時はどうすればよいのでしょうか?
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
ポインタの演算では、そのポインタの型が加減の単位となります。
下記URLの解説を参照してください。特に「21-7 ポインタを演算する」の
Console.WriteLine( p2-p1 );
ではまさしく同じことをやっています。
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/cs …
なお、アドレスの差を求めるには、
(&vc[2]-&vc[0])*sizeof(int)
で求められるかもしれませんが、処理系に依存します。また、intでなく構造体のポインタの場合、うまくいかない可能性が高いです。詳しくは「アラインメント」で検索してみてください。
No.1
- 回答日時:
> これは要素の離れている差を表していると思うのですが、なぜアドレスの減算にならずにこのような結果になるのでしょうか?
それはアドレスの減算ではなくポインタの減算だからです。
ポインタは単なるアドレスではなく、
int型へのポインタというように型情報も含んでいて、
ポインタ演算は指す型のサイズを考慮して行われます。
(そうでないと、いろいろなところで不便です。)
> またアドレスの差を求める時はどうすればよいのでしょうか?
char *型にキャストするとか、sizeof(int)をかけるとか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(SNS・コミュニケーションサービス) ゲームでボイスチャットを使いたいんですが、親にどう説明したらいいですか 2 2022/08/03 14:07
- 物理学 Va=1/4πε × (q1/a + q2/b + q3/c) Vc=1/4πε × (q1+q2+ 2 2023/04/16 14:08
- 国産車 【日産自動車のVCターボエンジンは4WD動作を部品点数を減らした一体化したユニットにした 5 2023/05/26 23:00
- オンラインゲーム VCしながらゲームしたい… 2 2022/06/11 16:04
- イヤホン・ヘッドホン・補聴器 pc vcについて ゲーミングヘッドホンでvcをやろうとしたのですが相手の声が聞こえるのですが、自分 2 2023/06/16 20:42
- 工学 非対称三相交流について 2 2022/07/06 00:36
- 国産車 【VCターボエンジン】を搭載している車種を教えてください。 1 2023/05/25 19:19
- オンラインゲーム ValorantってオープンVCないんですか? プッシュ・トゥ・トークしかない感じ? 1 2023/03/17 03:01
- 掃除機・クリーナー・空気清浄機 東芝のコードレス掃除機について教えてください。VCCL S2Nと、VC CLW31では、何がちがいま 2 2023/01/04 21:10
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
C言語の関数と配列に関する質問
-
IStream / VBA
-
init関数の意味
-
可変長のリスト
-
main(int argc,char **argv[])...
-
指定した長さのフィボナッチ数...
-
関数ポインタを返す関数の型をt...
-
コンストラクタでnewを失敗した...
-
ダイアログから、ドキュメント...
-
DirectXのDIRECT3DTEXTURE9
-
C言語でのconstを返す関数
-
なぜ?counterintuitive
-
C言語 配列の長さの上限
-
VBA基本構文の作り方 2列の...
-
c言語
-
mallocについて
-
_tcscpy_s(wcscpy_s)の第二引数...
-
C言語 strstrの実装
-
c#について、現在テトリスを作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
Run-Time Check Failure #3とい...
-
C言語の関数と配列に関する質問
-
LPSTR型の初期化について
-
戻り値で構造体を返すことは可...
-
参照型で受け取った引数をポイ...
-
構造体とfscanf
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
Cで作成したDLL関数をVBから呼...
-
C言語でのconstを返す関数
-
main(int argc,char **argv[])...
-
DLL<->VB間での受け渡し(文字...
-
PASCALとFARの意味
-
エラーの意味
-
ハンドルはポインタか
-
TCHAR文字列内の検索について
おすすめ情報