ポインタを理解する

WBOY
リリース: 2024-07-16 22:21:11
オリジナル
881 人が閲覧しました

Entendendo Ponteiros

テクノロジーの学位には、一般に学生を怖がらせる概念や科目があります。主な例のいくつかはオブジェクト指向プログラミングと微積分に関連する科目であり、別の例はより基本的な概念、抽象構造です。この記事の主題である主に C のポインターなど。
私たちとは異なり、コンピューターは特定の情報を「ラベル」や「名前」によって認識するのではなく、そのデータがメモリ内に配置されているアドレスによって認識します。メモリは、0 または 1 を格納する多数のビットを含む「セル」のセットと考えることができ、各セルは、マシンによって実行されるプログラムがこのデータにアクセスして操作できるように、情報を格納する特定のアドレスに関連付けられています。それ。
プログラムがデータを使用できるようにするには、メモリ内のそのアドレスを知る必要があることを念頭に置いて、ポインタの概念を考えることができます。ポインタは、他のデータを「指す」変数であり、操作できるように別の変数や情報のアドレスを格納することを目的としたメモリ内の空間のようなものです。
しかしここで、ポインタは何に役立つのかという疑問が生じます。ポインタを使用すると、Malloc による動的割り当てやより複雑なデータ構造の作成など、メモリに関連するより複雑な操作が可能になります。さらに、ベクトルの名前がポインタであるという事実など、最初は学生が気づきにくい詳細がいくつかあります。そうです、ベクトルはメモリ内の特定の位置を指す「固定ポインタ」にすぎず、必要に応じてインデックスを使用して操作します。
もう 1 つの用途は、参照によるデータの操作です。たとえば、配列をパラメータとして別の関数に渡し、渡された値やオブジェクトが単なるコピーではなく、元の配列を変更できるようにします。これは、たとえば、JavaScript で行われる処理です。存在しません。ポインターの概念はあります (少なくとも明示的には)。次に例を示します。

#include <stdio.h>

int vet [5] ={10,20,3,4};

void somadez(int * ref){
    for(int i=0;i<5;i++)
        ref[i]+=10;
}

int main () {
    somadez(vet);
    for(int i=0;i<5;i++)
        printf("%i\n",vet[i]);

    return 0;
}

saída:
20
30
13
14

note que quem foi alterado foi o vetor original
ログイン後にコピー

もう 1 つのあまり明白ではないポインタの使用法ですが、今回はオブジェクト指向言語用です。たとえば、動的オブジェクトを作成し、継承やポリモーフィズムの作業を容易にすることができます。
以下に C++ を使用した例を示します。

#include <iostream>

using namespace std;

class Animal{
public:
    virtual void som();
};

class Cachorro : public Animal{
public:
    void som(){
        cout << "auau";
    }
};

int main () {
    Animal * ClasseBase;
    Cachorro ClasseFilha;

    ClasseBase = &ClasseFilha;
    ClasseBase->som();
    //neste caso podemos usar o ponteiro para acessar métodos e atributos de uma classe derivada.
    return 0;
}
ログイン後にコピー

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

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート