真偽 値(整数型)
真 0以外の値
偽 0
ここで注意してほしいのは,等しいかどうかを比較するときには==という記号を利用するということです. =という記号に間違えてしまう傾向にあります. ==の部分を=にしても文法的には間違いではなく,ただの代入文になります. なので,コンパイル時にエラーにならないので注意して下さい. GCC/Clangでは,if文等の条件式で==を間違えて=と書いてコンパイルした時に,以下の警告メッセージを表示します. GCC:warning: suggest parentheses around assignment used as truth value [-Wparentheses] Clang:warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
日本語訳は「条件式ではカッコを付けましょう」という意味ですが,==を間違えて=と書いてしまった時に表示されるメッセージです. デバッグに有用なので覚えておきましょう. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include
」を用いて構造体の各メンバにアクセスしています。メンバ z に関してはポインタ型ですので、最後の printf 関数では、「ポインタで指した先の構造体」のポインタのメンバにアクセスしていることになります。ちょっとややこしいですが、 (*構造体ポインタ型変数). メンバ名 により、ポインタから構造体のメンバにアクセスし、各メンバの値を取得できていることが確認できると思います。 でも、上のプログラム、 すごく書きにくいし読みにくい ですよね…。 特に構造体のメンバにポインタがあるとアクセスするのに括弧や「*」が複数あって非常に読みにくいです。この 構造体のポインタを用いた時のプログラムの書きにくさ、読みにくさを解決してくれるのが、アロー演算子「->」 なのです!! スポンサーリンク アロー演算子「->」は「*」と「. 」を一つにまとめた演算子 アロー演算子「->」とはまさに、ここまで説明してきた、ポインタから構造体のメンバへアクセスする演算子です。 使用方法は下記のように変数名とメンバ名の間に「->」を入れ込む形になります 構造体ポインタ型変数->メンバ名 実は、前のプログラムで用いた (*構造体ポインタ型変数). メンバ名とアロー演算子を用いた構造体ポインタ型変数->メンバ名は全く同じ動作 をします。 なので、今まで解説してきた「*」と「. 」による動作をアロー演算子「->」一つだけで実現することができますし、括弧の数も減らせますので、 アロー演算子を用いることでプログラムも書きやすくプログラムも直感的に読める ようになります。先ほどのプログラムをアロー演算子を用いたプログラムに書き直してみましょう。 #include
More than 1 year has passed since last update. ポインタ渡し・ポインタ演算の復習というか勉強のためにいろいろ書いて試したことがあるので,それを公開しておきます. 自分の勉強ノートとしてと,初心者向けに「こう書くとこうなる」の例を紹介できればという記事です. 一連の関数へのポインタ渡しの話の最後の記事という位置付けでもあります. 第1弾: C言語でユーザ定義関数にargvやFILEを渡したい(関数へのポインタ渡し) 第2弾: C言語でユーザ定義関数にargvやFILEを渡したかった(関数へのポインタ渡し) なお,以下の説明にはあまり自信がないので,鵜呑みにされるとまずいかも知れないですし,よく分かってらっしゃる方に「合ってる」「間違ってる」等コメントいただけると幸いです. まずは簡単と思われる方から.配列をあとでやります. 書いてみたコードはこれです. sample1. c #include// int型変数のアドレスを受ける void func1 ( int * pt){ * pt = 5; // ポインタが指す先の変数の中身を5に} // int型ポインタのアドレスを受ける void func2 ( int ** pt){ ** pt = 6; // ポインタが指す先のポインタが指す先の変数の中身を6に} int main ( void){ int a = 0; func1 ( & a); // 変数のアドレスを渡す printf ( "call func1(&a) \n "); printf ( "a=%d \n\n ", a); int * b = & a; func2 ( & b); // 変数のアドレスを格納したポインタのアドレスを渡す printf ( "call func2(&b) \n "); printf ( "a=%d *b=%d \n\n ", a, * b); func1 ( b); // 変数のアドレスを格納したポインタを渡す printf ( "call func1(b) \n "); return 0;} output1 $. /sample1 call func1(&a) a=5 call func2(&b) a=6 *b=6 call func1(b) a=5 *b=5 コードとコメントを見てもらえればだいたいわかってもらえるでしょうか.
四則演算のみの電卓
C言語入門者
投稿記事
by C言語入門者 » 10年前
四則演算のみの電卓を作成しています。
入力できる数値の項は3項までとします。
途中まで作成したのですが、上手くいきません。
問題点は以下に記載します。
・2項の演算が行われない。
・3項の演算は正確に行われるが、処理が抜けてしまって2項の計算結果も表示されてしまう。
二項に飛ぶ処理が上手くいかないのです。ご指導お願いします。
コード:
#include