首页 > 后端开发 > C++ > 正文

理解指针

WBOY
发布: 2024-07-16 22:21:11
原创
876 人浏览过

Entendendo Ponteiros

在技术学位中,有些概念和科目通常会让学生感到害怕,一些主要的例子是与面向对象编程和微积分相关的科目,另一个例子是一些更基本的抽象概念诸如指针之类的结构,主要是 C 语言,也是本文的主题。
与我们不同,计算机不通过“标签”或“名称”来了解某些信息,而是通过该数据在内存中的位置来了解某些信息。我们可以将内存视为一组“单元”,其中包含许多存储 0 或 1 的位,每个单元都与存储一些信息的特定地址相关联,以便机器执行的程序可以访问这些数据并进行操作它。
请记住,程序要能够使用数据,就需要知道其在内存中的地址,我们可以设想指针的概念。指针是一个“指向”其他数据的变量,就好像它是内存中的一个空间,用于存储另一个变量或信息的地址,以便可以对其进行操作。
但现在问题来了,指针有什么用呢?指针允许进行一些涉及内存的更复杂的操作,例如使用 Malloc 进行动态分配或创建更复杂的数据结构等。此外,还有一些细节一开始学生不太容易注意到,例如向量的名称是指针。没错,向量无非是一个“固定指针”,指向内存中的某个位置,我们可以根据需要使用索引进行操作。
另一种用途是通过引用操作数据,例如:将数组作为参数传递给另一个函数,允许修改原始数组,而不是传递的值或对象只是一个副本,例如,在 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
登录后复制

指针的另一个不太明显的用途,这次是面向对象语言,例如,我们可以创建动态对象并促进继承和多态性的工作。
下面是使用 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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板