C++ 参照とポインター パラメーターの受け渡しを使用するにはどうすればよいですか?
C の参照とポインターはどちらも関数パラメーターを渡す方法ですが、違いがあります。リファレンスは変数のエイリアスです。リファレンスを変更すると元の変数が変更され、ポインタには変数のアドレスが格納されます。ポインタ値を変更しても元の変数は変更されません。参照またはポインターの使用を選択する場合は、元の変数を変更する必要があるかどうか、NULL 値を渡す必要があるかどうか、パフォーマンスに関する考慮事項などの要素を考慮する必要があります。
C での参照およびポインター パラメーター受け渡しガイド
C では、参照とポインターは関数パラメーターを渡すための 2 つの強力なツールです。これらは、関数内の呼び出し関数の変数を変更する方法を提供します。
参照
参照は、別の変数に別名を提供する C データ型です。参照が作成されると、それに対する変更は元の変数に反映されます。
構文:
Type& reference_variable = original_variable;
例:
int x = 10; int& ref_x = x; ref_x++; // 等同于 x++ cout << x << endl; // 输出:11
ポインタ
ポインタは C データ型で、別の変数のアドレスを格納します。プリミティブ変数には、ポインターを逆参照することでアクセスできます。
文法:
Type* pointer_variable = &original_variable;
例:
int y = 10; int* ptr_y = &y; *ptr_y++; // 等同于 y++ cout << y << endl; // 输出:11
パラメータの違い
参考値 | ポインタ | |
---|---|---|
参考値 | アドレスのコピー | |
元の変数の変更 | 元の変数またはアドレスを変更できます | |
低 (直接アクセス) | 高 (逆参照が必要) | |
なし | #動的メモリの割り当て | #定数参照 |
#null 値を渡す | No | |
実用的なケース - 関数での値交換 |
void swap_by_ref(int& a, int& b) { int temp = a; a = b; b = temp; }ポインタを使用して値交換を実装する:
参照またはパラメータを渡すときは、次の要素を考慮してください: 以上がC++ 参照とポインター パラメーターの受け渡しを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。void swap_by_ptr(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
パラメータを渡すメソッドを選択します元の変数を変更する必要があるかどうか:
必要に応じて、参照を使用します。
null 値を渡す必要があるかどうか:

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

Cのベクトル要素を見つける最も一般的な方法は、STD :: findを使用することです。 1。STD:: ITERATORの範囲とターゲット値で検索するために検索します。返されたイテレーターがend()に等しいかどうかを比較することにより、それが見つかったかどうかを判断できます。 2。カスタムタイプまたは複雑な条件の場合、std :: find_ifを使用する必要があり、述語関数またはlambda式を渡す必要があります。 3.文字列などの標準タイプを検索すると、ターゲット文字列を直接渡すことができます。 4.各検索の複雑さはO(n)であり、小規模データに適しています。頻繁に検索するには、std :: setまたはstd :: unordered_setの使用を検討する必要があります。この方法は、シンプルで効果的で、さまざまな検索シナリオに広く適用されます。

答えは次のとおりです。STD:: STRINGコンストラクターを使用して、CHARアレイをSTD :: Stringに変換します。配列に中間体「\ 0」が含まれている場合、長さを指定する必要があります。 1。「\ 0」で終わるcスタイルの文字列の場合、std :: stringsstr(chararray)を使用します。コンバージョンを完了するには。 2.文字配列に中央の「\ 0」が含まれているが、最初のn文字を変換する必要がある場合は、std :: stringstr(chararray、length)を使用します。長さを明確に指定します。 3.固定サイズの配列を処理するときは、「\ 0」で終了してから変換してください。 4。Str.Assign(Chararray、Chararray strlを使用します

todebugac applicationsinggdbinvisualstudiocode、configurethelaunch.jsonfilecorectly; keysettingsincludespecifiedtheexexecutable with "program"、「gdb」に「gdb」と「type」を「cppdbg」に設定し、「ex」を使用します

ディレクトリ簡潔な(証明)簡潔(証明)は何ですか?どのベンチャーキャピタルが簡潔(証明)をサポートしていますか? SP1ZKVMとProver Network Opsuccccinctテクノロジークロスチェーン検証を証明するトークン経済学トークンの詳細トークンアラケーション潜在的トークンホルダーは、トークンの価格予測を証明するトークンの価格予測を証明するトークンの価格の予測を証明するトークンの潜在的なトークンの予測されるトークンの価格の予測を証明します。サクサク

STD :: Mutexは、データ競争を防ぐために共有リソースを保護するために使用されます。この例では、STD :: lock_guardの自動ロックとロック解除を使用して、マルチスレッドの安全性を確保します。 1。STD:: MUTEXおよびSTD :: LOCK_GUARDを使用すると、ロックの手動管理によってもたらされる異常なリスクを回避できます。 2。マルチスレッドを変更する際には、カウンターなどの共有変数をMutexで保護する必要があります。 3.例外の安全性を確保するために、RAIIスタイルのロック管理をお勧めします。 4.固定順序でデッドロックと複数のロックを避けます。 5.共有リソースへのマルチスレッドアクセスのシナリオは、Mutex同期を使用する必要があり、最終プログラムは予想される10000および実際の出力を正しく出力します:10000。

要素を削除するときに反復している場合は、故障したイテレーターの使用を避ける必要があります。正しい方法は、it = vec.erase(it)を使用し、earseによって返された有効なイテレーターを使用してトラバースを続けることです。 batchバッチ削除に推奨される「消去除去」イディオム:vec.erase(std :: remove_if(vec.begin()、vec.end()、条件)、vec.end())、安全で効率的です。 reverse逆イテレータを使用して背面から前面に削除できますが、ロジックは明確ですが、条件方向に注意を払う必要があります。結論:消去リターン値でイテレーターを常に更新し、障害のあるイテレーターの操作を禁止します。そうしないと、未定義の動作が生じます。

theautokeywordinc deducestheTypeofavariaible fromitializer、makingcodecleanerandmoremaintable.1.特に、特にコンペルスティペステルター。2

TagDispatchingは、タイプタグを使用して、コンピレーション期間中に最適な関数過負荷を選択して、効率的な多型を実現します。 1。STD:: ITERATOR_TRAITSを使用して、Iteratorカテゴリタグを取得します。 2。複数のdo_advance過負荷関数を定義し、それぞれRandom_access_iterator_tag、bidrectional_iterator_tag、input_iterator_tagを処理します。 3.主な関数MY_ADVANCEは、派生したタグタイプに基づいて対応するバージョンを呼び出して、コンパイル期間の決定中にランタイムオーバーヘッドがないことを確認します。 4.このテクノロジーは、STD :: Advanceなどの標準ライブラリによって採用されており、拡張カスタマイズをサポートしています。
