ホームページ バックエンド開発 C#.Net チュートリアル C言語でカスタム関数から配列を返す方法(画像と文章で詳しく解説)

C言語でカスタム関数から配列を返す方法(画像と文章で詳しく解説)

Jun 17, 2020 pm 12:44 PM


C言語でカスタム関数から配列を返す方法(画像と文章で詳しく解説)

#C 言語でカスタム関数から配列を返す方法 (詳細な図とテキストの説明)

最近、クラスメートからの質問をいくつか見たのですが、その中には次のようなものがありました。関数で配列を返すにはどうすればよいですか?

カスタム関数に char * 型の戻り値を直接記述して、それを直接返すことはできますか?

C言語でカスタム関数から配列を返す方法(画像と文章で詳しく解説)

## str 配列名を直接返します ( & を付ける必要はありませんが、多くの学生がこの間違いを犯します)

しかし実際には、実行結果は正常ではありません。呼び出し側の関数で出力してみると、次のことがわかります。結果は元の内容ではありません (もちろん、コンピュータの出力です。まだこのようにはなっていないかもしれません)

は次のとおりです。

C言語でカスタム関数から配列を返す方法(画像と文章で詳しく解説)

#理由は、str のプロパティから始めることができるためです。str 自体はカスタム関数の

ローカル変数

です。 100 バイトの配列です。そのライフ サイクルは、もちろん、配置場所によって異なります。関数とともに、「皇帝と廷臣には一芸」という諺があるように、楽しい関数呼び出しが終了すると、その中のさまざまなローカル変数もシステムによって復元されます。もちろん、str 配列の 100 バイトも復元されるため、文字列「Hello www.dotcpp.com」は消去されました。当然ですが、main関数で出力したものは絶対にオリジナルの内容ではありません。 どうですか、わかります!

しかし、まだ終わったわけではなく、「なぜ次の書き方に変更できるのですか?」と質問し続ける学生もいます。

#以下に示すように:

##答え: この場合、str もローカル変数です。配列ではなくポインタで、わずか 4 バイトです。文字列「Hello www.dotcpp.com」を定数領域に格納しますが、この文字列は定数領域にあり、fun 関数に属する部分ではないことに注意してください。はプログラム全体で読み取り可能なため、return 後も存在します。返されるのは、文字列 "Hello www.dotcpp.com" の最初のアドレスである str の値です。これは数値であり、実際には以下と同等ですこの文字列のアドレスを戻り値を通じて str から p に転送します。 C言語でカスタム関数から配列を返す方法(画像と文章で詳しく解説)

たとえを使うこともできます。以前は fun 関数だけがこの文字列を知っていましたが、今ではそれが死にかけています。死ぬ前に、彼は告白しました。「私はもうすぐ死にます。急いで「Hello www .dotcpp.com のトレジャー アドレス (文字列の最初のアドレス) が main 関数に転送されます!」と入力してください。

その後、すぐに main 関数に戻ります。 !その後消えます...

そして main 関数を取得するとわかります...

これで理解できますか?方法?

後半のC言語逆解析の部分でもここの原理が絡んでくるので、より深く学んで理解することができます。

同時に、次の記事ではカスタム関数の配列受け渡しの実装方法について説明します。

前回の説明で、配列を直接返す場合の問題点や理由は理解できたと思いますので、今回は関数で配列を返す一般的な方法について詳しく解説していきます。

#この種の問題では、関数内で処理された結果データを渡す必要があるなど、関数間の相互通信の問題を解決するアプリケーション シナリオがよくあります。

1. グローバル変数を直接使用する: この方法が最も便利ですが、この方法では、関数間の通信とカプセル化が重要であると考えられるため、その使用は推奨されず、今日の議論の範囲を超えています。

2. ヒープ領域での動的メモリ割り当てによる解決策: C 言語では、通常、malloc を使用してヒープ領域に動的にメモリを割り当てます。使用後は手動で「引き取り」機能を搭載し、柔軟な管理を実現します。実際の開発ではよく使われる手法であり、現在のメインコンテンツでもあります。

3. 呼び出し元は配列ポインターを渡します: このメソッドは関数の戻りアドレスを必要としませんが、呼び出し時に配列アドレスを直接渡し、呼び出し先に操作の実行を委ねます。 . このローカル変数は呼び出し元自身に属しているため、呼び出し先がメモリ解放を完了しても配列には影響しません。

一つずつ実験してみましょう 2 番目の方法では、ヒープ領域に動的にメモリが割り当てられるため、ヒープ領域はローカル変数をスタック領域に格納したくないのです。前回の講義で説明したとおりです。システムはライフサイクルに基づいて行われます。自動的に回復しますが、手動で開発および手動でリリースすることで、問題を完全に回避できます。以下の例と効果を参照してください:

注意してください: メモリを防ぐために、使用後は忘れずに解放してください。

C言語でカスタム関数から配列を返す方法(画像と文章で詳しく解説)

#3 番目の方法: 関数で配列は返されませんが、配列通信の問題も解決できます。主なアイデアは次のように定義することです。呼び出し元の配列を呼び出し、アドレスを渡します。メモリは呼び出し先ではなく呼び出し元に属するため、呼び出しの完了後に呼び出し先がメモリを解放しても問題ありません。サンプルプログラムとその効果は以下のとおりです。

C言語でカスタム関数から配列を返す方法(画像と文章で詳しく解説)

配列転送の使用方法の概要は上記のとおりです。ご質問やご不明な点がございましたら、お気軽にお問い合わせください。

読んでいただいた皆様、ありがとうございます。多くの利益が得られることを願っています。

推奨チュートリアル: 「

C 言語

以上がC言語でカスタム関数から配列を返す方法(画像と文章で詳しく解説)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語で特殊文字を処理する方法 C言語で特殊文字を処理する方法 Apr 03, 2025 pm 03:18 PM

C言語では、以下などのエスケープシーケンスを通じて特殊文字が処理されます。\ nはラインブレークを表します。 \ tはタブ文字を意味します。 ESACEシーケンスまたは文字定数を使用して、Char C = '\ n'などの特殊文字を表します。バックスラッシュは2回逃げる必要があることに注意してください。さまざまなプラットフォームとコンパイラが異なるエスケープシーケンスを持っている場合があります。ドキュメントを参照してください。

C文字列におけるcharの役割は何ですか C文字列におけるcharの役割は何ですか Apr 03, 2025 pm 03:15 PM

Cでは、文字列でCharタイプが使用されます。1。単一の文字を保存します。 2。配列を使用して文字列を表し、ヌルターミネーターで終了します。 3。文字列操作関数を介して動作します。 4.キーボードから文字列を読み取りまたは出力します。

C言語のcharとwchar_tの違い C言語のcharとwchar_tの違い Apr 03, 2025 pm 03:09 PM

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

C言語でさまざまなシンボルを使用する方法 C言語でさまざまなシンボルを使用する方法 Apr 03, 2025 pm 04:48 PM

c言語のシンボルの使用方法は、算術、割り当て、条件、ロジック、ビット演算子などをカバーします。算術演算子は基本的な数学的操作に使用されます。割り当てと追加、下位、乗算、除算の割り当てには、条件操作に使用されます。ポインター、ファイル終了マーカー、および非数値値。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C言語でCharを変換する方法 C言語でCharを変換する方法 Apr 03, 2025 pm 03:21 PM

C言語では、charタイプの変換は、キャスト:キャスト文字を使用することにより、別のタイプに直接変換できます。自動タイプ変換:あるタイプのデータが別のタイプの値に対応できる場合、コンパイラは自動的に変換します。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

C言語でchar配列の使用方法 C言語でchar配列の使用方法 Apr 03, 2025 pm 03:24 PM

Char Arrayは文字シーケンスをC言語で保存し、char array_name [size]として宣言されます。アクセス要素はサブスクリプト演算子に渡され、要素は文字列のエンドポイントを表すnullターミネーター「\ 0」で終了します。 C言語は、strlen()、strcpy()、strcat()、strcmp()など、さまざまな文字列操作関数を提供します。

See all articles