기술 학위에는 일반적으로 학생들을 겁나게 하는 개념과 과목이 있습니다. 주요 예 중 일부는 객체 지향 프로그래밍 및 미적분과 관련된 과목이고, 또 다른 예는 좀 더 기본적인 개념 추상 구조입니다. 이 글의 주제는 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!