
No.1ベストアンサー
- 回答日時:
C言語から遠く離れた者ですが、
>>> よくやるのは、引数にポインタを渡して、内容を書き換える手を使っています
これが常識でしょう。これが直感的に理解できるようにC言語を身に付ける必要があるのではないでしょうか。
No.5
- 回答日時:
構造体を戻り値で返す方法でまったく問題ないのですがこの場合変数のコピーが行われます。
大きな構造体の場合はコピー処理の時間がもったいないので結局引数にポインタを渡す方法を使う事が多いですね。
#include <stdio.h>
#include <string.h>
typedef struct {
int n;
double d;
char s[10];
} DATA;
void func(DATA* d)
{
d->n = 123;
d->d = -4.56e10;
strcpy(d->s, "test");
}
int main(void)
{
DATA data;
func(&data);
printf("%d %g %s\n", data.n, data.d, data.s);
return 0;
}
No.4
- 回答日時:
一つの関数で戻す値が二つある場合、その二つの戻り値には密接な関連があると考えられるので、
これを構造体として一つにまとめるのは十分妥当だと思われます。
その場合も構造体をコピーして戻すのではなく、あらかじめ確保した変数へのポインタを引き数で渡して、
その内容を書き換えるという手法が一般的だと思います。
そして戻り値はエラーコードを戻すために利用する。
No.3
- 回答日時:
こんなサンプルで体感してみてください。
#include <stdio.h>
#include <string.h>
typedef struct {
int n;
double d;
char s[10];
} DATA;
DATA func(void)
{
DATA d;
d.n = 123;
d.d = -4.56e10;
strcpy(d.s, "test");
return d;
}
int main(void)
{
DATA data;
data = func();
printf("%d %g %s\n", data.n, data.d, data.s);
return 0;
}
No.2
- 回答日時:
戻り値を複数返すことは不可能ですが、
構造体でパックにして戻り値にすることは簡単です。
#include <stdio.h>
typedef struct {
int a;
int b;
} Test_t;
// 戻り値が構造体な関数
Test_t GetTest( void )
{
Test_t Test = { 10, 20 };
return Test;
}
int main( void )
{
Test_t Test = GetTest();
printf("%d %d", Test.a, Test.b ); //構造体の中身を表示
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
電子書籍プレゼントキャンペーン!
最大2万円超分当たる!マンガや小説が読める電子書籍サービス『Renta!』で利用できるギフトコードプレゼント実施中!
-
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
ポインタを使って構造体の配列を戻り値にするには
C言語・C++・C#
-
関数から配列を返すには?
C言語・C++・C#
-
4
#defineの定数を文字列として読み込む
C言語・C++・C#
-
5
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
6
C言語で構造体のメンバを簡単に出力する方法ありますか?
C言語・C++・C#
-
7
別ファイルの構造体の値を読み込む、変えるには?2
C言語・C++・C#
-
8
【gcc・cygwin】multiple definitionエラーの解決法
C言語・C++・C#
-
9
構造 他のクラスの構造体を別のクラスで使いたい。
C言語・C++・C#
-
10
適切な変換関数が存在しない???
C言語・C++・C#
-
11
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
12
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
13
構造体のextern方法
C言語・C++・C#
-
14
Debug Assertion Failed?
C言語・C++・C#
-
15
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
16
ラッパーって何なんでしょう・・・?
C言語・C++・C#
-
17
char*を初期化したいのですが
C言語・C++・C#
-
18
C言語での文字列より値を抜き出す
C言語・C++・C#
-
19
関数におけるif文とreturn文について
C言語・C++・C#
-
20
C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
C言語のポインタに直接アドレス...
-
5
構造体の中の構造体
-
6
C言語でのconstを返す関数
-
7
CObArrayとCPtrArrayの違い
-
8
Run-Time Check Failure #3とい...
-
9
CopyMemory()をmemcpy()に書き...
-
10
ポインタのミスでOS壊れるの...
-
11
基本アルゴリズムの『返す』の...
-
12
コンストラクタでnewを失敗した...
-
13
LPSTR型の初期化について
-
14
ポインタへの値の代入時の警告...
-
15
メモリのアドレスからの値の取...
-
16
戻り値で構造体を返すことは可...
-
17
C言語 配列の長さの上限
-
18
VBAにてcolorindexを変数に格納...
-
19
プログラムによく出てくるst...
-
20
C言語初心者 構造体 課題について
おすすめ情報
公式facebook
公式twitter