ネットワーク・プログラミング Cプログラミングの基礎
Cプログラミングの基礎 1.1 ポインタ変数を理解する アスタリスク *pは、pがポインタ変数であることを表す。 ポインタ変数には、アドレスが入る。&aは変数aのアドレスを表す。 *pはpが指すアドレスの中身を表す。 #include <stdlib.h> int main() { int a, b; int *p; a=100; p=&a; b=*p; return EXIT_SUCCESS; } アンパサンド 矢印は、変数pの中身が変数aのアドレスであることを表す メモリ 番地 メモリ内容 a 1232 b 2010 p 425 100 1232 メモリ内容はメモリ番地
1.2 ポインタ変数の大きさ p1は、文字型変数を指し示すポインタ変数。 p2は、整数型変数を指し示すポインタ変数。 1.2 ポインタ変数の大きさ p1は、文字型変数を指し示すポインタ変数。 p2は、整数型変数を指し示すポインタ変数。 p3は、浮動小数点型変数を指し示すポインタ変数。 char data1, *p1; int data2, *p2; double data3, *p3; p1=&data1; p2=&data2; p3=&data3; data1の内容が格納されているメモリ番地 4byte p1 p2 p3 1byte data1 data2 4byte data3 8byte
1.3 配列とポインタ p=aとすると、ポインタ変数pに配列aの先頭アドレスが入る。 1.3 配列とポインタ p=aとすると、ポインタ変数pに配列aの先頭アドレスが入る。 p++すると、ポインタ変数pに配列の次の要素のアドレスが入る。 int a[10]; int *p; p=a; *p=100; p++; *p=101; 4byte a[0] a[1] a[9] 100 101 p : : p++を実行すると、pは配列の次の要素を指し示す
1.4.1 構造体 kiteiという構造体の型(テンプレート)を定義する。 k_dataは、kitei型の変数。 1.4.1 構造体 kiteiという構造体の型(テンプレート)を定義する。 k_dataは、kitei型の変数。 構造体にデータを代入する。変数名(k_data)と構造体のメンバ(rank)の間にドット(.)が入る。 struct kitei { char rank; int shoukin; }; struct kitei k_data; k_data.rank=‘a’; k_data.shoukin=50; k_data. a k_dataにデータを代入した結果 rank 50 shoukin
k_data[9]にデータは代入されていない 1.4.2 構造体の配列 構造体を指すポインタ変数。 ptrに配列k_dataの最初の要素のアドレスを入れる。 ポインタ変数ptrを使って構造体のメンバを指定するには、ptrとメンバ名の間に矢印(->)が入る。 ptrは次の要素(k_data[1])を指し示す。 struct kitei { char rank; int shoukin; }; struct kitei k_data[10]; struct kitei *ptr; ptr=k_data; ptr->rank=‘a’; ptr->shoukin=50; ptr++; ptr->rank=‘b’; ptr->shoukin=40; ptr k_data[9]にデータは代入されていない k_data[0]にデータを代入した結果 k_data[9] k_data[0] k_data[1] a b : rank rank rank 50 40 shoukin shoukin shoukin
1.4.3 ポインタ変数をメンバに含む構造体 NULL キーボードからの入力がメンバs_dataに入る。 1.4.3 ポインタ変数をメンバに含む構造体 int i; struct s_list{ int s_data; struct s_list *ptr; }; struct s_list youso[10]; struct s_list *curr, *head, *w_ptr; curr=head=w_ptr=youso; for (i=0; i<10; i++) { if (scanf(“%d”,&w_ptr->s_data)==EOF) break; curr=w_ptr; curr->ptr=++w_ptr; } curr->ptr=NULL; キーボードからの入力がメンバs_dataに入る。 「=++」は。インクリメントしてから代入する。 head curr w_ptr 線形リスト youso[0] youso[1] youso[2] youso[9] NULL :
宿題2 宿題(プログラムshoukin.c) レポートの締切は次の週の水曜日18:00 表紙に氏名と学籍番号を書く プログラムをemacsで打ち込み、実行結果を報告 VMwarePlayerからubuntuを立ち上げる (或いは、TeraTermでipcs.bene.fit.ac.jpにログイン) emacsを使って、shoukin.cを入力 コンパイル: gcc -o shoukin shoukin.c 実行: ./shoukin 実施した内容を説明する文章を書く レポートはWordを使って書く レポートの締切は次の週の水曜日18:00
まとめ C言語 ポインタ変数 線形リスト