c言語の配列関数ポインタの活用法
こんにちわ、慶さんです。
今回は関数ポインタの便利なところをあげたいと思います。
ポインタというと難しいイメージがあるのですが、実際にはそんなに難しい概念ではありません。ポインタ変数とはあくまで、他の変数を指すアドレスを格納する変数のことです。
関数もアドレスを持っているので、ポインタで参照することができます。
便利な点を3つあげたいと思います。
⑴コマンドの値によって、関数を選択する場合、本来は、if-else文などで複数記述しなければならないところを一行で済みます。
⑵⑴によって可読性が優れている。
⑶関数を増やしたい場合、可読性を壊さずに、容易に変更することができる。
主な理由は以上です。
書き方もとてもシンプルです。
int (*func[2])(int,int);
関数ポインタの宣言、引数int型で2つ持ち、戻り値はint型の関数をポインタで指定できます。
func[0]=funcA;
func[1]=funcB;
func[2]=funcC;
関数のアドレスをポインタ変数に格納する。
scanf("%d",cmd);
func[cmd](cnt,avg);
関数ポインタで、関数に直接アクセスし、操作できます。これにより、容易にアクセスすることが出来ます。
以上。
c言語プログラム解析
こんばんわ、慶さんです!
他人のプログラムをバグ潰しするのは、とても難解だと感じます。他人のソースコードで書かれたプログラムのロジックやデータ構造を把握することは難解だからです。
そこで実際に講師の方がおっしゃっていたことは、
⑴現象を把握する。
コマンドライン等で、テストをして、表面上の出力結果だけではなく、内部でどう動いたからこういう結果になったということを正しく把握する。
⑵原因を特定する
こういった処理の時は、こういうソースを書くといったロジックをたくさん自分の知識に蓄えることで、初めて、バグの原因はここなのではないかと把握できる。
それでもわからない場合は、チェックポイントで値がどのようなものが、返ってきているのかをデバッグして把握する。
⑶修正する
原因を把握したら、どのように修正すれば仕様通りの動きを実現できるのかを考える。
以下の流れで、業務を遂行することで、正しくデバッグを行えるということです。
補足ですが、テスト項目は、正常系は当然ですが、異常系、境界値、限界値をテストすることが、製品として世に出すためには不可欠です。
c言語、ファイルストリーム の処理の流れ
こんばんわ、慶さんです。
ファイルストリームの補足ということで説明させていただきます。
ファイルは開いて、操作して、閉じる流れで操作すると思います。実際に、c言語を使ってファイルを作成して、文字を入力して、終了するという処理は以下となります。
FILE *fp;
fp=fopen("text.txt","r");
fputs(fp);
fclose(fp);
1オープン
2操作
3クローズ
1.2.3の流れで我々は、ファイルを作成して保存しているわけです。
標準ライブラリ関数のprintf関数やscanf関数は、このファイルストリームを応用した関数ということになります。
c言語のポインタ配列と配列ポインタの違い
こんばんわ、慶さんです。
初めて1人の方が読者になっていただき大変嬉しい限りです。
今回は、ポインタ配列と配列ポインタの概要を説明したいと思います。
まず、配列ポインタとは、配列の要素がポインタ変数で、出来ている配列のことです。
ソースコードは、
char a,b,c,d,e;
char arr_p[5]={&a,&b,&c,&d,&e};
*arr_p=getch();
putch(a);
ポインタ配列とは、ポインタ変数が配列要素を指すことです。一般的に関数で文字列をポインタで渡す場合ポインタのポインタを仮引数にとってもらいます。
char *str[2]={"123","456"};
func(str);
}
void func(**str){
printf("%s",*str);
}
プログラムで書くと配列ポインタとポインタ配列は意味が全く違うので、ごっちゃにならないようにしてください。
c言語の2次元配列
こんばんわ、慶さんです。
2次元配列に値を格納したのを出力するときには注意が必要です。
例えば、棒グラフを作成しようとした時、
配列に値を格納する時に、2重ループで、2次元配列に格納する場合が多数だと思います。
縦から格納した場合は、表示する際に改行を入れる位置やどのように表示していくかを考慮しなければ、訳のわからない表示になります。
例
for(I=0;I<10;I++){
for(j=0;j<20;j++){
Arr[j][i]=1;
}
}
for(j=0;j<10;j++){
for(I=0;I<20;I++){
printf("%c",arr[j][i]);
}
putch('¥n');
}
c言語、ファイルI/O
こんばんわ、慶さんです(^o^)
今回は、ファイルストリームの概念について説明しようと思います。
そもそもストリームとは、画面の出力や入力といった機能ややりとりを保存してあるフォルダの総称である。
抽象的な概念なので大変わかりにくいのですが、要は、パソコンのような標準入出力を持たない機器でも、入出力できるようにストリームで管理するものです。
このことを特にファイルストリームと言います。
c言語、文字列を数値に変換
こんばんわ、慶さんです!
研修から1ヶ月経ちまして、ようやくc言語プログラムの真髄に入ったところです。
今回は、コンピュータの深いところを学習しました。
getch関数で、1文字の文字を読み取ります。そして、
putch関数で、その文字を引数として受け、出力します。
そして、
戻り値で格納した値をatol関数で引数としてアドレスを渡し、数値をもらいます。
以下の流れによって、文字の数値を数値の数値に変換することができます。
ちなみに、getchだけでは、画面出力されなくて戸惑いました笑
いかにprintf関数が優秀なのかわかりました。
EX
char c;
long nun;
c=getch();
putch(c);
num=atoi(&c);
以上
入社式
こんばんわ、慶さんです^_^
自分の中では社会人になる心構えは出来ていると思ったけど、想像以上に不足している事に気づいた。
例えば、当たり前だけど
問われた事には返事をする。
重要な箇所はメモをする。
身だしなみには気を使う。
失敗しても良いが、同じ間違いを二度しない。
私が入った会社は、そういう人として当たり前な重要な事もしっかりと教育してくれるので、勉強に成るなぁと実感しました。
エンジニアとして働く以前に、社会人としてのマナーや会社のルールを守って行けるそんなエンジニアになりたいですね。
成島
初投稿 多くのエンジニアの励みになりたい!
初めまして、慶さんです^_^
エンジニアになる以上ブログ書いて、知識を整理するために活用したり、自己紹介の短縮になったりということを、
中島 聡「エンジニアとしての生き方 」の書籍に書かれていたので、共感して書いてみようと思います。
そして何より、多くのエンジニアの方の励みになればと思います!
主にテーマにあげようと思うことが、
システムエンジニアの活動に関して
①仕事や勉強でチャレンジすること
②苦労・挫折の経験
③悔しかった事の経験
④仕事の転機や私を変えた出来事
⑤ソフトウェア工学に関する事
⑥その他
これらの事を書いていけたら良いなと思います。
見てくださった方に少しでも、笑顔になってくれるようなブログにしたいと思うのでこれから宜しくお願いします!
成島