目次
1. 基本指针定义与使用
2. 指针与函数(通过指针传参修改实参)
3. 动态内存分配(new 和 delete)
4. 常见错误提醒

cポインターの例

Aug 07, 2025 pm 09:55 PM
c++ ポインタ

指针是C++中用于存储内存地址的核心特性,1. 通过int ptr = &var定义指针并用ptr访问值;2. 函数通过指针参数可修改实参,实现类似引用传递;3. 使用new动态分配内存、delete释放内存,数组则用delete[];4. 需避免野指针、重复释放和内存泄漏,使用后应将指针置为nullptr。掌握取地址&、解引用*及内存管理规则是正确使用指针的关键。

C++ pointer example

指针是 C++ 中非常核心且强大的特性,它允许我们直接操作内存地址。下面通过一个简单、实用的例子来说明指针的基本用法。

C++ pointer example

1. 基本指针定义与使用

#include <iostream>
using namespace std;

int main() {
    int var = 10;           // 普通变量
    int *ptr = &var;        // 定义指针,指向 var 的地址

    cout << "变量 var 的值: " << var << endl;           // 输出 10
    cout << "var 的地址: " << &var << endl;             // 输出地址,比如 0x7fff...
    cout << "指针 ptr 存储的地址: " << ptr << endl;     // 输出相同地址
    cout << "指针 ptr 指向的值: " << *ptr << endl;      // 输出 10,*ptr 是解引用

    // 修改指针指向的值
    *ptr = 20;
    cout << "修改后 var 的值: " << var << endl;         // 输出 20

    return 0;
}

说明:

  • &var:取变量 var 的内存地址。
  • int *ptr:声明一个指向整型的指针。
  • *ptr:解引用操作,获取指针所指向地址中的值。

2. 指针与函数(通过指针传参修改实参)

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 5, y = 10;
    cout << "交换前: x = " << x << ", y = " << y << endl;

    swap(&x, &y);  // 传入地址

    cout << "交换后: x = " << x << ", y = " << y << endl;
    return 0;
}

输出:

C++ pointer example
交换前: x = 5, y = 10
交换后: x = 10, y = 5

重点:

  • 函数参数使用指针,可以修改主函数中的原始变量。
  • 这是“按引用传递”的底层实现方式之一。

3. 动态内存分配(new 和 delete)

int main() {
    int *p = new int;       // 动态分配一个 int 空间
    *p = 100;

    cout << "动态分配的值: " << *p << endl;

    delete p;               // 释放内存
    p = nullptr;            // 避免悬空指针

    // 分配数组
    int *arr = new int[5];
    for (int i = 0; i < 5; ++i) {
        arr[i] = i * 10;
    }

    cout << "数组内容: ";
    for (int i = 0; i < 5; ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;

    delete[] arr;           // 释放数组
    arr = nullptr;

    return 0;
}

注意:

C++ pointer example
  • new 分配内存,delete 释放单个对象,delete[] 释放数组。
  • 使用后将指针设为 nullptr,防止误用。

4. 常见错误提醒

  • 野指针:指向未知地址的指针。

    int *p;
    *p = 10;  // 错误!p 没有初始化
  • 重复释放内存

    delete p;
    delete p; // 危险!已释放的内存不能再 delete
  • 忘记释放内存:导致内存泄漏。


  • 基本上就这些核心用法。指针刚开始容易让人困惑,但只要记住:

    • 指针存的是地址;
    • * 是解引用;
    • & 是取地址;
    • 动态分配要配对 new/delete

    多写几个例子练一练,很快就能掌握。

    以上がcポインターの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

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プログラムをコンパイルして実行する方法 Sep 16, 2025 am 05:29 AM

installac compilerlikegを使用して、packagemanagordedordementtoolsdependingontheos.2.writeac andsaveitwitha.cppextension.3.compiletheprogramusingg hello.cpp-ohellotogenerateanexecutable.4.runtheexecutable

cでシステムコマンドを実行する方法 cでシステムコマンドを実行する方法 Sep 21, 2025 am 04:35 AM

std :: system()関数を使用してシステムコマンドを実行します。システムコマンドは、ヘッダーファイルを含めてstd :: system( "ls-l")などのcスタイルの文字列コマンドに渡す必要があり、リターン値は-1です。つまり、コマンドプロセッサは使用できません。

Cカスタムアロケーターの例 Cカスタムアロケーターの例 Sep 17, 2025 am 08:45 AM

カスタムアロケーターを使用して、Cコンテナのメモリ割り当て挙動を制御できます。 1.例のログインガロカーターは、オーバーロードをオーバーロードすることにより、メモリ操作を実装します。 2。アロケーターは、STLコンテナタイプの変換要件を満たすために、value_typeを定義し、テンプレートを再構築する必要があります。 3.アロケーターは、建設とコピー中にログ出力をトリガーします。これは、ライフサイクルの追跡に便利です。 4.実際のアプリケーションには、メモリプール、共有メモリ、デバッグツール、組み込みシステムが含まれます。 5。c 17以来、コンストラクトと破壊はdefaultでstd :: allocator_traitsによって処理できます

cにカスタムイテレータを実装する方法 cにカスタムイテレータを実装する方法 Sep 20, 2025 am 01:13 AM

答えは、必要なタイプのエイリアスと操作を含むクラスを定義することです。まず、value_type、参照、ポインター、Difference_Type、およびIterator_categoryを設定し、その後、控除、増分、および比較操作を実装します。最後に、容器内のbegin()およびend()メソッドをiteratorインスタンスを返すように提供し、stlアルゴリズムとループの範囲と互換性があります。

c抽象クラスの例 c抽象クラスの例 Sep 15, 2025 am 05:55 AM

抽象クラスは、少なくとも1つの純粋な仮想関数を含むクラスです。インスタンス化することはできず、基本クラスとして継承する必要があります。派生クラスは、そのすべての純粋な仮想関数を実装する必要があります。そうしないと、抽象クラスになります。 1。純粋な仮想関数は、仮想リターンタイプfunction name()= 0によって宣言されます。インターフェイス仕様を定義するには。 2。抽象クラスは、領域()、draw()などの統一されたインターフェイス設計によく使用され、多型呼び出しを実装します。 3。抽象クラス(仮想〜shape()= default;などなど、派生クラスオブジェクトが基本クラスのポインターを通じて正しくリリースされるようにするために、仮想デストラクタを提供する必要があります。 4。導出されたクラスが継承した後、それぞれの領域を計算するために領域()を実装する長方形や円などの純粋な仮想関数を書き直す必要があります。 5。

なぜリアルタイムシステムが決定論的応答を保証する必要があるのですか? なぜリアルタイムシステムが決定論的応答を保証する必要があるのですか? Sep 22, 2025 pm 04:03 PM

リアルタイムシステムには、正確性が結果配信時間に依存するため、決定論的応答が必要です。ハードリアルタイムシステムには厳格な締め切りが必要であり、逃したことは災害につながりますが、ソフトリアルタイムは時折遅延を可能にします。スケジューリング、割り込み、キャッシュ、メモリ管理などの非決定的要因はタイミングに影響します。建設計画には、RTOの選択、WCET分析、リソース管理、ハードウェアの最適化、厳密なテストが含まれます。

cで静的変数を作成する方法 cで静的変数を作成する方法 Sep 19, 2025 am 05:24 AM

astaticvariableは、functioncallsandisializedonce.2.insideafunction.3.inaclass.3.inaclass、itissharedamongallinstances andmustded andmustdededeclastoavoidlinkinlinkers.4.statevaria.4.statevaria

ファイル全体をcの文字列に読み込む方法 ファイル全体をcの文字列に読み込む方法 Sep 18, 2025 am 06:07 AM

STD :: IFSTREAMおよびSTD :: ISTREAMBUF_ITERATORを使用して、ファイルの内容全体をスペースやラインブレークを含む文字列に効率的に読み取り、中規模のテキストファイルに適しています。

See all articles