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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 双方向リスト 1 2023/06/28 04:16
- C言語・C++・C# C言語で構造体の参照渡しができません 2 2022/12/18 21:22
- その他(言語学・言語) 外国語問題 1 2022/07/21 15:21
- その他(言語学・言語) ピダハン語 2 2022/07/14 12:41
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語の質問です HTMLでこのようなコードを書いたのですがそれをC言語で同じように書きたいです < 1 2022/08/11 23:38
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# C言語について。 3 2022/11/05 20:30
- C言語・C++・C# gettimeofday() と localtime_r() を使って現在の日時をマイクロ秒単位で表 2 2022/10/26 21:15
- C言語・C++・C# いまc言語を独学で勉強しているのですがいまいちわかりません。 https://monozukuri- 3 2023/07/06 18:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IE8でのjavascriptエラーについて
-
数秒ごとに画像を変え、リンク...
-
1枚の画像をクリックすると複数...
-
javascriptテキストBOX色を元に...
-
removeAttribute()メソッドで削...
-
リンク色を動的に変更したい。i...
-
JavaScriptで変更した属性の元...
-
https://でのレイアウト崩れを...
-
離れた場所にマウスオーバーで...
-
eclipseでcssを使うためには?
-
CSS <div>の入れ子が反映さ...
-
iframe内からjQueryで指定したい
-
画像をクリックして別の画像を...
-
【java】背景画像を一定時間で...
-
checkboxにチェックを入れると...
-
画像のフェードイン・フェード...
-
jqueryのsortableで一部ソート...
-
リンクで違うページの指定箇所...
-
スワップイメージが上手く動作...
-
背景色を一定時間ごとにランダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c++std::string型をTCHARに変換...
-
JSPでの画像ファイル表示
-
日替わりで画像を変更したい
-
クリックして変更した画像を他...
-
画像をクリックしたら別ウイン...
-
Javascriptで画像を水面のよう...
-
画面が真っ白になるのはどうして?
-
JavaScriptの画像入れ替えについて
-
ボタンでイメージの変更/Netsc...
-
Excel VBA マクロ 画像(...
-
ロールオーバー画像の枠線を消...
-
画像をクリックすると音が鳴り...
-
「戻る」「進む」ボタンで画像...
-
画像クリックで画像変化を1ペー...
-
時間で背景の画像を変更したい...
-
VBScriptで画像を切り替え。
-
クリックすると小さい画像がキ...
-
どこに画像ファイルを入れるの...
-
外部参照で画像出したいのだが...
-
javascritpの中身をHTML-lintで...
おすすめ情報