C言語関係掲示板

過去ログ

No886 フラグの意味と使用方法

[戻る] [ホームページ]
No.349

フラグ
投稿者---スラスラ(2003/07/31 23:07:23)


フラグの意味と使用方法が色々調べてみたのですが、わからないので
教えてください。出来ればサンプルプログラムおねがいします。

それとポインタのポインタ(**)の意味が良くわからないのですが
それについても解説お願いします。

No.350

Re:フラグ
投稿者---あかま(2003/07/31 23:45:47)


>フラグの意味と使用方法が色々調べてみたのですが、わからないので
>教えてください。出来ればサンプルプログラムおねがいします。
フラグは"flag"、旗のことです。
"イベントフラグが立つ"のような言い方をしますが、"イベントのスイッチが入った"というような意味です。
つまり、プログラムの最初にflag=0;とか書いておいて、
なんらかの条件がそろった時にflag=1;とか入れてフラグを立てます。
その後、flagを何に使うかはプログラムしだいです。

>それとポインタのポインタ(**)の意味が良くわからないのですが
>それについても解説お願いします。
ポインタが分かればポインタのポインタもなんとなくイメージが…

int型の宣言は

int a;

と書きます。そのポインタは

int *p;
 p = &a;
 
と書きます。
ではさらにそのポインタを扱いたくなったらどうするか?

int **pp;
pp = &p;

と書きます。
さらにそのポインタは…ということで延々続けることができます。
この場合、ppにpのアドレス、pにaのアドレスが入っているので、

*pp
と
p

は同じ意味です。また

**pp
と
*p
と
a

は同じ意味です。
こんな回りくどいことしてなんの意味があるかというと、
ポインタはpp++;とか書くと次の要素を指すことができるので、
処理が早いのと、慣れれば見た目きれいなプログラムが書けるのです。たぶん。
もうちょっと具体的な例はこちらで。
http://www9.plala.or.jp/sgwr-t/c/sec10-4.html


No.351

Re:フラグ
投稿者---ともじ(2003/08/01 00:03:54)


こんばんは。

>フラグの意味と使用方法が色々調べてみたのですが、わからないので
>教えてください。出来ればサンプルプログラムおねがいします。

プログラム中でちょっと印を付けたいときなどに使います。
例えばこんな感じ。(単なるサンプルなのでgets使ってます。ご容赦を。)
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char buf[256];
    int sflg = 0, nflg = 0, i;
    
    gets(buf);
    
    for (i = 0; buf[i] != '\0'; i++) {
        if (isspace(buf[i]))
            sflg = 1;
        if (isdigit(buf[i]))
            nflg = 1;
    }
    
    if (sflg != 0)
        printf("文字列中に空白類文字が存在します。\n");
    if (nflg != 0)
        printf("文字列中に数字が存在します。\n");
        
    return 0;
}
昔はメモリをケチるためにビットを使ってたくさんフラグがある
プログラムを書いたりしましたが、フラグがありすぎると処理の
流れがわかりづらくなるので多用は禁物です。
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.3.7.html