質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

815閲覧

CとC#でのポインタ活用概念

ParaParaDance

総合スコア56

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/05/19 02:17

Cでは関数を作る時、返り値が多い場合、パラメタ部をポインタにして一遍に渡したほうが楽です。例えば void Func(&a, &b, &c, &d);

しかし、C#でこれをやろうとしたら、unsafeだの、Taskでの制限だの、色々制約が付くように見えます。

やはりC#では、パラメタ部(関数の括弧)はInput専用で、返り値(Return)をOutput専用にし、返り値毎に関数を細かく分けたほうがよいでしょうか?

また、C++で作ったDLLもC#に合わせ、ポインタを持たないこまい関数の形で作った方がやりやすいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/05/19 02:20

C# は参照渡しができるので、ref や out を使えば似たことはできますが、それよりもタプルを使って複数の戻り値を戻す方が今風です。
dodox86

2020/05/19 02:29

Zuishinさん、良いコメントなので回答されてはいかがでしょうか。 Cでいうvoid Func(&a, &b, &c, &d);はC#のvoid Func(ref a, ref b, out c, out d); とか、P/Invokeでもほぼ一致すると思いますし、タプルの話も良いご指摘だと思います。(私自身、その発想が有りませんでした)
dodox86

2020/05/19 02:33

あ、タプルの戻り値に限っては、C/C++の関数とのインターフェースを考えた場合は、相容れないのかもしれませんが。
Zuishin

2020/05/19 02:39

この質問者は私を無視しているので、回答したくありません。質問者のことはどうでも良くて、後から見る人のためにコメントしています。また回答の方もそれを踏まえたものになることを期待しています。 正しい回答をつけた時、サブアカウントでいくつも低評価をつけられ、粗悪な回答がベストアンサーになったのでは、後から見た人に悪影響を与えます。言葉で反論するしかないところであれば、そんな輩を排除できます。
Zuishin

2020/05/19 02:42

あと、この質問者のサブアカウントらしきものを私は少なくとも二つ認識しています。
dodox86

2020/05/19 02:46

なるほど、承知いたしました。私にとって有益な知識を得たので、特に異存はありません。どうもありがとうございます。
ParaParaDance

2020/05/20 06:11

Zuishin>>無視?なんのこと言っているのか意味わからん。 サブアカ作って遊んでるほど暇じゃありませんよ。
Zuishin

2020/05/20 06:12

お仕事にお戻りください。
guest

回答3

0

ベストアンサー

Cでは関数を作る時、返り値が多い場合、パラメタ部をポインタにして一遍に渡したほうが楽です。例えば void Func(&a, &b, &c, &d);

しかし、C#でこれをやろうとしたら、unsafeだの、Taskでの制限だの、色々制約が付くように見えます。

別にC(C++)のDLLとデータやり取りするだけなら、unsafeもTaskも不要です。
引数を複数用意しても受け渡しは出来るでしょうが、私なら LayoutKind.Sequential な構造体の参照をやり取りします。

投稿2020/05/19 04:23

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

クラスを引数にとって結果をそこに入れるってことができるんだから、それでいいのでは。

なんやかやいっても、ポインタというのは安全性からみると悪手です。
JAVAやC#などポインタを使わないで済ませれるならそのほうがいいですわな

投稿2020/05/19 02:20

編集2020/05/19 02:39
y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

...ほうがよいでしょうか?
...方がやりやすいでしょうか

好きにしたら良いのでは.(真面目な回答)

目の前に複数案があるなら実際に比較してみて判断すればどうでしょう.
「あなたの想定する場面や背景事情etcにおいて」どういう形がより(何らかの意味で)良いのか,というのを.

投稿2020/05/19 04:10

fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問