森山です。

  神戸さん、河野さん、ありがとうございます。

  ポインタ型で宣言した後に、領域の確保を行うのですね。

#   そう思って、入門書を読むと[ 実行時に、malloc 関数を使用して
# 記憶領域を確保...]とさらっと記載されていました。うーん、例文
# くらい掲載してほしかった...あれ、例文あるな〜巻末に...

On Wed, 23 Feb 2005 00:01:49 +0900
神戸隆行 <kando@nerimadors.or.jp> wrote:

>     tTest Mode1;/* define tTest type local object Mode1 */
>     ptMode1 = &Mode1;/* get address of Mode1 */

>  あるいは:

>     ptMode1 = (tTest*)malloc(sizeof(tTest));

On Tue, 22 Feb 2005 15:43:46 +0000 (UTC)
kono@ie.u-ryukyu.ac.jp (Shinji KONO) wrote:

> 初期化でで解決するなら、
> 
>     tTest tTest0;
>     tTest *ptMode1  = &tTest0;
> 
> ですかね。1 line で
> 
>     tTest tTest0,*ptMode1  = &tTest0;

> 代わりのシンタックスとして、
>     tTest& *ptMode1;
> (わけわからん)
> C++ っぽく、
>      ptMode1 = tTest();
> new でもいいか、
>      ptMode1 = tTest->new;
> GCC の拡張っぽく、
>      ptMode1 = typed_malloc(tTest);
>      (typeof (ptMode1)) p = ptMode1 ;

    又、色々な方法のご教示ありがとうございます。

で、教えてもらった内容を元に、以下のような program を作成しました。

#   元々、以下の program 作成が目的で、先の program はエラーと
# なったことから、エラーの切り分けように作成したものです。
#
#   内容は、ユーザが宣言した構造体型ポインタに体して、別に設定している
# 構造体型ポインタのアドレスを設定するというものです。

#include <stdio.h>

typedef struct tSample {
        int iDummy ;
        int iDummy2 ;
} tSample ;

tSample gSystemArea , *pgSystem = &gSystemArea ;

int biSetPointer ( int *piTemp )
{
    *piTemp = (int)pgSystem ;
    return ( 1 ) ;
}

int main ( int srgc, char* argv[] )
{
    tSample *pgUser ;
    int     biDone ;

    pgUser = (tSample*)malloc(sizeof(tSample)) ;
    pgUser->iDummy   = 15 ;
    pgSystem->iDummy = 30 ;

    printf("pgUser->iDummy   = %d\n" , pgUser->iDummy   ) ;
    printf("pgSystem->iDummy = %d\n" , pgSystem->iDummy ) ;

    biDone = biSetPointer ( &pgUser ) ;

    printf("pgUser->iDummy   = %d\n" , pgUser->iDummy   ) ;
    printf("pgSystem->iDummy = %d\n" , pgSystem->iDummy ) ;

    return(0) ;
}

  これをコンパイルすると、

$ gcc dummy3.c
dummy3.c: 関数 `main' 内:
dummy3.c:34: 警告: 互換性のないポインタ型からの引数 1 個の `biSetPointer' を渡しますです

  と、表示されます。一応コンパイルは出来るのですが、あまり気持のいい
ものでは有りません。

  本来は以下の部分を、

        biDone = biSetPointer ( &pgUser );

  以下のようにすべきなのでしょうが、

        biDone = biSetPointer ( (int * )&pgUser );

  この部分は、変更せずに( &pgUser )のままで、関数側で
対処する方法はないものでしょうか? ご存じの方がいましたら
ご教授願います。

-- 
K.Moriyama