ページ 11

NULLの扱いについて教えてください

Posted: 2007年9月30日(日) 01:22
by すすむ
C言語初心者で、プログラム勉強中です。
わからないことがありますので教えてください。
いろいろ試しているのですができないのです。
下記のようにNULLを引数で渡したい時は送り側は
どのようにしたらよろしいのでしょうか?。
できれば解説付きで教えてください。
#include <stdio.h>
typedef struct susumu {
int test1;
int test2;
int test3;
} SUSUMU;
void test1(SUSUMU test);

int main()
{
SUSUMU test;

test.test1 = 1;
test.test2 = 2;
test.test3 = 3;

test1(NULL);
return 0;
}
void test1(SUSUMU test1)
{
if(&test1 = NULL){
 printf("%d",12345);
}
}

Re:NULLの扱いについて教えてください

Posted: 2007年9月30日(日) 01:48
by YuO
NULLはポインタですから,
---- 引用開始 ----
void test1(SUSUMU test);
---- 引用終了 ----
を,
void test1 (SUSUMU * test);
として,
---- 引用開始 ----
void test1(SUSUMU test1) 
{ 
if(&test1 = NULL){ 
 printf("%d",12345); 
} 
}
---- 引用終了 ----
は,
void test1 (SUSUMU * test)
{
    if (test == NULL) { /* Cの比較演算子は=ではなく==です */
        printf("%d", 12345);
    }
}
のようにします。

Re:NULLの扱いについて教えてください

Posted: 2007年9月30日(日) 01:54
by すすむ
ご回答ありがとうございます。
私の質問が足りませんでした。
test1(NULL);の関数は変えないで
呼び側を変えてNULLを渡したいのです。
そんなことできますか?。

何度もすいませんが、ご教授お願い致します。

Re:NULLの扱いについて教えてください

Posted: 2007年9月30日(日) 03:11
by YuO
・構造体を変化させず,非ポインタ型の引数のままにしたいのであれば,NULLを渡す事をあきらめる
・構造体を変化させず,NULLを渡したいのであれば,引数をポインタ型にする
この2択です。
空ポインタ定数とはどういうものか,ちゃんと考えてみて下さい。

# Null-Object patternという方法もあるものの,CでやるとSUSUMUを利用する箇所全体に影響を及ぼしそうなので……。

Re:NULLの扱いについて教えてください

Posted: 2007年9月30日(日) 03:25
by YuO
ぐはっ……最悪……。
「初心者のためのポイント学習C言語」さんの掲示板2#8022とのマルチポストか……。

Re:NULLの扱いについて教えてください

Posted: 2007年9月30日(日) 10:50
by \n