在技术学位中,有些概念和科目通常会让学生感到害怕,一些主要的例子是与面向对象编程和微积分相关的科目,另一个例子是一些更基本的抽象概念诸如指针之类的结构,主要是 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中文网其他相关文章!