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も見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
【C言語】戻り値が構造体の関数
C言語・C++・C#
-
ポインタを使って構造体の配列を戻り値にするには
C言語・C++・C#
-
関数から配列を返すには?
C言語・C++・C#
-
-
4
C言語 配列の長さの上限
C言語・C++・C#
-
5
別ファイルの構造体の値を読み込む、変えるには?2
C言語・C++・C#
-
6
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
7
C言語でヘッダファイルにグローバル変数を宣言する
C言語・C++・C#
-
8
C#で構造体の配列を持った構造体を使いたいのですが
C言語・C++・C#
-
9
構造体のメンバをfor文で回したい
C言語・C++・C#
-
10
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
11
既定のコンストラクタがない?
C言語・C++・C#
-
12
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
13
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
-
14
プログラムについての質問です。 fflush(stdout)はいったいどのような時に使われているので
C言語・C++・C#
-
15
C言語での引数の省略方法
C言語・C++・C#
-
16
正負を反転させて出力するプログラム
C言語・C++・C#
-
17
【gcc・cygwin】multiple definitionエラーの解決法
C言語・C++・C#
-
18
コンボボックスでデフォルト値の設定
C言語・C++・C#
-
19
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
20
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
C言語のポインタに直接アドレス...
-
参照型で受け取った引数をポイ...
-
構造体の削除について
-
デバイスハンドルとは?
-
ExcelVBAでのkernel32(64bit)
-
c言語のエラーについて
-
LPSTR型の初期化について
-
コンストラクタやデストラクタ...
-
C言語 ポインタと配列の違い...
-
fopne で失敗する原因
-
スコープ外でのアドレスの参照...
-
TCHAR文字列内の検索について
-
NULLポインタは0と書かなければ...
-
C++ vectorのbeginについて
-
C言語でのconstを返す関数
-
関数ポインタの高速化のメリット
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
fopne で失敗する原因
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
ExcelVBAでのkernel32(64bit)
-
参照型で受け取った引数をポイ...
-
ハンドル、アドレス、ポインタ...
-
ハンドルはポインタか
-
C言語でのconstを返す関数
-
デバイスハンドルとは?
-
Cで作成したDLL関数をVBから呼...
-
popenした子プロセスのプロセス...
-
c言語で任意のファイルから読み...
-
[excel vba] マウスポインタの...
-
パスからファイル名を抽出
-
プーさんのマウスポインタを教...
-
基本アルゴリズムの『返す』の...
おすすめ情報