まとまった文章ではない愚痴とかはTwitterでフォロー!



Google+

2014年2月11日火曜日

【C言語】構造体について学びました。

久々の学習レポートです。本業が多忙になってきた事もあり、あまり学習の時間がとれない事が非常に悔やまれますが、休日は出来るだけ1時間は学習の時間に充てるように心がけています。




構造体というのは、型がそれぞれ違う変数を複数扱う場合において便利な仕組みです。下記の記述のように、最初にtypedefによって構造体を宣言する事が基本になります。構造体にぶら下がる形で要素を定義して行きます。結果的に構造体そのものをコピーする事により、構造体にぶら下がっている要素すべてをコピーできるという利点があります。住所録などの扱いには非常に重宝出来る仕組みだと思います。当然同じように、関数での受け渡し、ポインタ、配列それぞれで使う事が出来ます。

typedef struct{
    char name[256];
    int age;
    int sex;
}People;

void InputPeople(People *data); //ポインタ変数定義
void PrintPeople(People data); //通常変数定義(表示だけ)

int main(int argc, const char * argv[])
{
    People data[3]; //data構造体を配列定義
    int i;
    
    for (i = 0;i < 3;i++){
        InputPeople(&data[i]);
    } //入力を3回繰り返す
    
    for (i = 0;i < 3;i++){
        PrintPeople(data[i]);
    } //表示を3回繰り返す
    return 0;
}

void InputPeople(People *data){
    printf("名前:");
    scanf("%s",data->name);
    printf("年齢:");
    scanf("%d",&data->age);
    printf("性別:");
    scanf("%d",&data->sex);
    printf("\n");
}

void PrintPeople(People data){
    char sex[16];
    
    printf("名前:%s\n",data.name);
    printf("年齢:%d\n",data.age);
    if (data.sex == 1 ) {
        strcpy(sex,"男性");
        
    } else {
        strcpy(sex,"女性");
    }
    printf("性別:%s\n",sex);
    printf("\n");

}

やってて思いますが、やっぱり実際にコードを確認しながら数字がどう変化するかをみて行くのが一番頭に入って来る感じがします。ただ、サンプルコードは、単純なデータを受け渡す表現しか出来ないので、これがどのように応用されるのか、実際に市場に出回っているプログラムはどのような表現でコードを書いていて、どういう動きをしているのかが分かれば、もっと頭に入って来るのだろうなと思いました。

しかし未だにポインタ変数の記述方法などがごっちゃになってしまい、↓こういうの

int *p ,i;
    p = &i; 
//iのアドレスをポインタ変数pに代入
    *p = 
1//通常変数モードに切り替えたポインタ変数pに代入
    
printf(" p= %p\n", p); //ポインタ変数xを表示
    
printf(" i = %d\n",i);
    
printf(“*p= %d\n", *p); //通常変数モードxを表示

参考文献を読まないとエラーになってしまう事が多いので、まだまだ頭にしみ込んでいないのだなぁと思いました。

From ゆづ

0 件のコメント:

コメントを投稿