No.4ベストアンサー
- 回答日時:
これは「メモリの内容を連続してコピーする時の慣用表現」です。
「dest」は destination の略で、データのコピー先を表す時によく使われます。
また「src」は source の略で、データのコピー元を表す時によく使われます。
それぞれの演算子の評価順についてですが、これは「演算子の優先順位」と「演算子の結合規則」に従って解決されます。
(「C言語 演算子 優先順位 結合規則」で検索すれば、結構ヒットします。)
まずは優先順位の高いものから評価します。
優先順位とは、例えば「加算と乗算が混じっている式では、乗算が優先される」というようなことです。
問題の式の中では * と ++ は同一の優先順位を持ち、= はそれより低くなっています。
ですので、代入より先に「*dest++」と「*src++」が評価されます。
ちなみに = の前後(「*dest++」と「*src++」)の評価順については規定されておらず、結果は処理系に依存します。
(どちらが先に評価されるかは不定なので、この評価順に影響されるようなコードを書いてはいけません。)
次に dest や src にくっついている * と ++ の評価順ですが、このような同一の優先順位を持つ演算子同士の評価は、結合規則に従います。
結合規則とは、例えば「乗算と除算が続いている場合、左から順に計算する」というようなことです。
(このような「左から右」の規則以外に、「右から左」という規則があります。)
* と ++ の結合規則は、ともに「右から左」です。(同一優先順位の演算子は、同じ結合規則を持ちます。)
なので、例えば dest に着目した場合、まず右側の ++ と結合して評価され、その後 * と結合して評価されます。
よって、最終的には、
(*(dest++)) = (*(src++));
という順で評価されます。
ただし、++ が最初に評価されていても、実際にインクリメント処理が行われるのは「式全体が評価された後」、つまり代入が行われた後です。
* より先に ++ が評価されたことで、「++ が作用するのは *dest ではなく、dest である」ということが決定されるのです。
No.3
- 回答日時:
#include <iostream.h>
main( ) {
char *src = "abcde";
char d[50];
d[0] = src[0]; // d[0] = 'a';
d[1] = src[1]; // d[1] = 'b';
d[2] = 0;
cout << d; // ab
}
////////////////////////////////////////
#include <iostream.h>
main( ) {
char *src = "abcde";
char d[50];
char *dest = d;
*dest = *src; // d[0] = src[0];
*dest++; // *dest = d[1];
*src++; // *src = src[1];
*dest = *src; // d[1] = src[1];
*++dest = 0; // d[2] = 0;
cout << d; // ab
}
////////////////////////////////////////
#include <iostream.h>
main( ) {
char *src = "abcde";
char d[50];
char *dest = d;
*dest++ = *src++; // d[0] = src[0]; その後添え字に1を足す
*dest++ = *src++; // d[1] = src[1];
*dest = 0; // d[2] = 0;
cout << d; // ab
}
////////////////////////////////////////
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPでの画像ファイル表示
-
画像をクリックすると音が鳴り...
-
c++std::string型をTCHARに変換...
-
画面が真っ白になるのはどうして?
-
IE8でのjavascriptエラーについて
-
フォームに入力された値により...
-
C言語のポインタ表現
-
Excel VBA マクロ 画像(...
-
時間で背景の画像を変更したい...
-
画像をクリックしたら別ウイン...
-
データの記録方法
-
画像クリックした後別ウィンド...
-
MAX関数を使ってからLEFT JOIN...
-
Slick.jsのオプションrtlについて
-
jspでcssが読み込めない
-
1枚の画像をクリックして複数の...
-
1枚の画像をクリックすると複数...
-
■ポップアップウィンドウをIEで...
-
textareaに画像を表示したい
-
タブ切り替えの初期表示について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPでの画像ファイル表示
-
フォームに入力された値により...
-
データの記録方法
-
ロールオーバー画像の上にテキ...
-
c++std::string型をTCHARに変換...
-
画面が真っ白になるのはどうして?
-
iframeのサイズを自動設定する...
-
OnMouseOverで画像のサムネイル...
-
クリックした自身の画像を別画...
-
Submit()について
-
曜日別でFLASHの切り替え
-
IE8でのjavascriptエラーについて
-
JavaScriptのhistory.back(戻...
-
画像を変えるスクリプト
-
Litebox v1.0のカスタマイズ方法
-
スライドショー(1回)が思う...
-
onmouseover、onmouseoutの仲間...
-
画像をクリックしたら別ウイン...
-
MinGWでfreetypeのmake時に
-
Excel VBA マクロ 画像(...
おすすめ情報