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
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
5
C言語でヘッダファイルにグローバル変数を宣言する
C言語・C++・C#
-
6
構造体のメンバをfor文で回したい
C言語・C++・C#
-
7
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
8
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
9
e^(x^2)の積分に関して
数学
-
10
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
11
クラスのアドレスを引数として渡したい
C言語・C++・C#
-
12
プログラムでの数字につく”f”の意味
C言語・C++・C#
-
13
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
14
適切な変換関数が存在しない???
C言語・C++・C#
-
15
プログラムについての質問です。 fflush(stdout)はいったいどのような時に使われているので
C言語・C++・C#
-
16
正負を反転させて出力するプログラム
C言語・C++・C#
-
17
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
18
C言語 exitの使い方
C言語・C++・C#
-
19
C言語のポインターに関する警告
C言語・C++・C#
-
20
スレッドの監視方法について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
C言語のポインタに直接アドレス...
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
fopne で失敗する原因
-
Cで作成したDLL関数をVBから呼...
-
入れ子の構造体について
-
ポインタについて
-
C言語の文字列?処理 strcpyやl...
-
連結リスト 要素の入れ替え
-
戻り値で構造体を返すことは可...
-
ハンドルはポインタか
-
[C言語] NULLは必ず0(番地)です...
-
ExcelVBAでのkernel32(64bit)
-
参照型で受け取った引数をポイ...
-
C言語の勉強しています。すみま...
-
関数ポインタを返す関数の型をt...
-
コンストラクタでnewを失敗した...
-
自作DLLの引数について、ポイン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
Cで作成したDLL関数をVBから呼...
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
構造体とfscanf
-
c言語で任意のファイルから読み...
-
デバイスハンドルとは?
-
main(int argc,char **argv[])...
-
基本アルゴリズムの『返す』の...
-
コンストラクタでnewを失敗した...
-
C言語の関数と配列に関する質問
-
参照型で受け取った引数をポイ...
-
ハンドル、アドレス、ポインタ...
-
DLL<->VB間での受け渡し(文字...
おすすめ情報