ポインタについて教えてください

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大輔

ポインタについて教えてください

#1

投稿記事 by 大輔 » 14年前

ポインタについて教えてください。

ポインタについて、勉強しています。
以下の4つの関数をつくり,値を取得し表示したいのですが、
①の場合は分かるのですが、
②の場合正しい表示がされるようにしたいので教えてください



(各関数の引数、変数は変更可能)
・int main(void) //値の表示
・bool Wrapper(int *pw, int type)
・void setdate(int *p) //ポインタに実際に値を入れる
・int *getdate()  //値のアドレスを返す

問題
①main関数から、Wrapper関数を経由して、set関数から値を取得し、表示する
意図として実施したい内容は、main内で、実態を宣言し、setdate関数内で値を代入し、main関数内で表示
②main関数から、Wrapper関数を経由して、get関数から値を取得し、表示する
意図として実施したい内容は、main内でポインタを宣言し、getdate内で実態を宣言しそのアドレスをかえし、main関数内で表示


以下がソースになります

コード:

#include <stdio.h>
#include "StdAfx.h"
#include <string.h>
#include <stdlib.h>


int *getdate() 
{
    static int num = 100;
    return &num;
}

void setdate(int *p)
{
	*p = 1;
}

void Wrapper(int *pw, int type)
{
	if( type == 0)
	{
		printf("pw[%d]\n",*pw);
		pw = getdate();
		printf("pw[%d]\n",*pw);
	}
	else if( type == 1)
	{
		setdate(pw);
	}


}

void main() 
{
    int *pget; //getの取得用
    int set;	//setの取得用
    pget = (int *)malloc(sizeof(int));
   Wrapper(pget, 0);
    printf("pget[%d]\n", *pget);  // =100

	Wrapper(&set,1);
	printf("set[%d]\n",set);
}

アバター
a5ua
記事: 199
登録日時: 14年前

Re: ポインタについて教えてください

#2

投稿記事 by a5ua » 14年前

getdate()の結果は、実体へのポインタなので、ポインタが指す値を取得する場合は、
*getdate()とします。

コード:

void Wrapper(int *pw, int type)
{
    if( type == 0)
    {
        *pw = *getdate();
    }
    else if( type == 1)
    {
        setdate(pw);
    } 
}
余談ですが、dateではなくdataではないですか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: ポインタについて教えてください

#3

投稿記事 by h2so5 » 14年前

pget = (int *)malloc(sizeof(int));
が存在する意味が分からないのですが。(しかもfreeしていません)

②の通りだとすると、実体はgetdate内で宣言されるんですよね?
main内でmallocを使って実体を作る意味は無いと思います。

初級者
記事: 200
登録日時: 14年前

Re: ポインタについて教えてください

#4

投稿記事 by 初級者 » 14年前

こうじゃないすか?

コード:

#include <stdio.h>

int *getdata(void)
{
    static int num = 100;

    return &num;
}

void setdata(int *p)
{
    *p = 1;
}

void Wrapper(int *pw, int type)
{
    if (type == 0) {
        *pw = *getdata();
        printf("pw[%d]\n", *pw);
    }
    else {
        setdata(pw);
    }
}

int main(void)
{
    int get, set;

    Wrapper(&get, 0);
    printf("get[%d]\n", get);

    Wrapper(&set, 1);
    printf("set[%d]\n", set);
    return 0;
}

閉鎖

“C言語何でも質問掲示板” へ戻る