
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も見ています
-
関数から配列を返すには?
C言語・C++・C#
-
ポインタを使って構造体の配列を戻り値にするには
C言語・C++・C#
-
C言語のポインタに直接アドレスを割り振りしたい
C言語・C++・C#
-
-
4
【C言語】戻り値が構造体の関数
C言語・C++・C#
-
5
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
6
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
7
C言語での引数の省略方法
C言語・C++・C#
-
8
unsigned long long 型のフォーマット指定子
C言語・C++・C#
-
9
構造体のextern方法
C言語・C++・C#
-
10
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
11
配列の要素数に変数を入れたいときには
C言語・C++・C#
-
12
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
13
変数の値が勝手に変化する原因
C言語・C++・C#
-
14
バッファとは何ですか
C言語・C++・C#
-
15
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
16
分割コンパイルの#defineについて
C言語・C++・C#
-
17
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
18
16進をASCIIコードに変換する手法
C言語・C++・C#
-
19
構造体のメンバをfor文で回したい
C言語・C++・C#
-
20
typedef enumの使い方を教えてください
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
戻り値で構造体を返すことは可...
-
C++で関数ポインタから関数名を...
-
コンストラクタでnewを失敗した...
-
fopne で失敗する原因
-
参照型で受け取った引数をポイ...
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
パスからファイル名を抽出
-
メモリのアドレスからの値の取...
-
トリプルポインタが必須!とな...
-
c言語で任意のファイルから読み...
-
VBはCを混乱させる?
-
LPSTR型の初期化について
-
ハンドルはポインタか
-
単方向リスト
-
C言語 ポインタと配列の違い...
-
自作DLLの引数について、ポイン...
-
プーさんのマウスポインタを教...
-
C言語でのconstを返す関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
セグメントエラー
-
Run-Time Check Failure #3とい...
-
ExcelVBAでのkernel32(64bit)
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
参照型で受け取った引数をポイ...
-
トリプルポインタが必須!とな...
-
ハンドルはポインタか
-
LPSTR型の初期化について
-
ポインターの使用法や利点
-
ポインタについて
-
c言語で任意のファイルから読み...
-
基本アルゴリズムの『返す』の...
-
コンストラクタでnewを失敗した...
-
ハンドル、アドレス、ポインタ...
-
アプリを32bitから64bit移行
-
デバイスハンドルとは?
-
NULLとブランクの違い
おすすめ情報