
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) test([)コマンドによる条件判定 2 2022/08/10 12:28
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- Excel(エクセル) Excelマクロの表示のExcel内をfindで検索 3 2022/06/15 20:07
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- 電車・路線・地下鉄 山手線値上げ! 値上げ前に買った回数券、定期券などは値上げ後も追加料金なしで使えるのか? 6 2022/04/06 07:14
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# いまc言語を独学で勉強しているのですがいまいちわかりません。 https://monozukuri- 3 2023/07/06 18:59
- 数学 確率の問題 4 2023/02/24 01:07
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
このQ&Aを見た人はこんなQ&Aも見ています
-
【C言語】戻り値が構造体の関数
C言語・C++・C#
-
ポインタを使って構造体の配列を戻り値にするには
C言語・C++・C#
-
関数から配列を返すには?
C言語・C++・C#
-
-
4
構造体のメンバをfor文で回したい
C言語・C++・C#
-
5
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
-
6
C言語での引数の省略方法
C言語・C++・C#
-
7
C言語のポインタに直接アドレスを割り振りしたい
C言語・C++・C#
-
8
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
9
グローバル変数のよくない使い方とその改良例
C言語・C++・C#
-
10
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
11
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
12
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
-
13
CloseとDisposeの違い
Visual Basic(VBA)
-
14
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
15
小数点入りの文字列をfloat型に変換
C言語・C++・C#
-
16
C#で構造体の配列を持った構造体を使いたいのですが
C言語・C++・C#
-
17
volatile修飾について
C言語・C++・C#
-
18
unsigned long long 型のフォーマット指定子
C言語・C++・C#
-
19
構造体のデータを丸ごとコピーしたい
C言語・C++・C#
-
20
C言語の配列をC++のvectorに高速に変換したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
ポインタについて
-
LPSTR型の初期化について
-
参照型で受け取った引数をポイ...
-
アプリを32bitから64bit移行
-
Wordでのリンク方法(Ctrlキー...
-
リトルエンディアンというもの...
-
セグメントエラー
-
c言語のエラーについて
-
ポインタ変数の疑問
-
C++とWIN32APIとゲームプログラ...
-
プーさんのマウスポインタを教...
-
戻り値で構造体を返すことは可...
-
デバイスハンドルとは?
-
DLL<->VB間での受け渡し(文字...
-
CImage GetBitsメソッドについて
-
Cで作成したDLL関数をVBから呼...
-
[C言語] NULLは必ず0(番地)です...
-
nullポインタを逆参照とは?
-
TCHAR文字列内の検索について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
Run-Time Check Failure #3とい...
-
ExcelVBAでのkernel32(64bit)
-
参照型で受け取った引数をポイ...
-
init関数の意味
-
セグメントエラー
-
アプリを32bitから64bit移行
-
ハンドルはポインタか
-
ハンドル、アドレス、ポインタ...
-
C言語でのconstを返す関数
-
C++で関数ポインタから関数名を...
-
パスからファイル名を抽出
-
ReadFileの読み込みエラーについて
-
#define NULL ((void *)0) の弊害
-
CImage GetBitsメソッドについて
-
ポインタ変数の疑問
-
Cで作成したDLL関数をVBから呼...
おすすめ情報