スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

前置、後置演算子

C言語のバイブル(『プログラミング言語C』)によると、
このインクレメントとデクレメントの演算子は変数のみに適用可能であり、(i+j)++のような式は書けない。

なんでだろう?
式は基本的に評価されるものだ。そして、評価されたものは定数的に扱われる。
たとえば、
x+7;
について、(x=3)だとしたら、
(x+7)=10

++(x+7);

++(10);  //定数に++できないのは分かってるけど。

=11
になってもいいようなもんだが。。。



まぁいい。本題に入ろう
C言語において、
x++ = 5;
++x = 5;
という記述はできない。コンパイルエラーになる。

ただし、xがポインタの場合、
*x++ = 5;
*++x = 5;
といった記述が可能。
(ポインタでもそうでなくても、x++ = 5;のような記述は不可)


次に、C++の場合。
x++ = 5;   //コンパイルエラー
++x = 5;
となり、前置のみ実行可能と定義されている。

そして、ポインタの場合はというと、
*x++ = 5;
*++x = 5;
どちらも、実行時エラー。
これについては、自分に詳しいことは分からない。
またの機会への課題にするしかないな。

xを配列として、
(*x)++ = 5;
++(*x) = 5;
とする記述は可能である。

○:実行可能  △:実行時エラー  ×:コンパイルエラー
intCC++
x++ = 5;××
++x = 5;×
*x++ = 5;××
*++x = 5;××

int *CC++
x++ = 5;××
++x = 5;××
*x++ = 5;
*++x = 5;

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

プロフィール

森嶋晃介

Author:森嶋晃介
社会人2年目。
独学する勉強のために、いろいろ手を出して、それについて書いていく予定です。
今年こそ、たくさん書くぞ

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。