C/C++에서 지침 에 대한 깊 은 이해
CPU 는 컴퓨터 의 핵심 부품 입 니 다.CPU 를 작 동 시 키 려 면 명령 과 데 이 터 를 제공 해 야 합 니 다.명령 과 데 이 터 를 메모리 에 저장 해 야 합 니 다.즉,우리 가 평소에 말 하 는 메모리 입 니 다.
메모 리 는 물리 적 메모리 와 가상 메모리 로 나 뉘 는데 물리 적 메모 리 는 컴퓨터 의 메모리 바 에 대응 하고 가상 메모 리 는 운영 체제 메모리 관리 시스템 이 가상 으로 만 든 것 이다.이것 은 우리 본문의 중점 이 아니 기 때문에 우 리 는 구분 하지 않 는 다.
cpu 캐 시 를 고려 하지 않 은 상태 에서 컴퓨터 실행 프로그램 은 본질 적 으로 메모리 에 있 는 데 이 터 를 조작 하 는 것 입 니 다.저장 소 는 여러 개의 저장 장치 로 나 뉘 어 져 있 습 니 다.저장 부 는 0 부터 순서 번 호 를 매 깁 니 다.CPU 는 메모리 에서 데 이 터 를 읽 으 려 면 먼저 저장 장치 의 주 소 를 지정 해 야 합 니 다.
CPU 가 메모리 에서 데 이 터 를 읽 는 과정 은 다음 과 같 습 니 다.
컴퓨터 는 메모리 관 리 를 편리 하 게 하기 위해 서 메모리 의 모든 단원 을 하나의 숫자 번호 로 사용한다.
포인터 와 포인터 상수
포인터 의 본 뜻 은 메모리 주소 입 니 다.우 리 는 메모리 번호 로 쉽게 이해 할 수 있 습 니 다.컴퓨터 가 번 호 를 통 해 메모리 셀 을 조작 하 는 이상 포인터 의 효율 을 높 일 수 있 습 니 다.
포인터 변수:
별표:
포인터 변 수 는 먼저 하나의 변수 입 니 다.포인터 변 수 는 특정한 변수의 메모리 주 소 를 저장 하기 때문에 우 리 는 보통'포인터 변 수 는 이 변 수 를 가리 키 고 있다'고 생각 합 니 다.또한 포인터 변 수 는 변 수 를 가리 킬 때 변 수 를 가리 키 며 그 값 은 변동 할 수 있 습 니 다.
반면 포인터 상수 는 고정된 메모리 단위 주소 번 호 를 저장 하 는 양 으로 통속 적 으로 이해 할 수 있 으 며,메모리 주 소 를 저장 한 후 에는 다른 메모리 주 소 를 저장 할 수 없다.
예 를 들 어:
void f(const int *x,int *y)
{
*x=2;// , x const , x
//
*y=3;
}
포인터 변수 와 배열먼저 예 를 하나 봅 시다.
int a[5]={1,2,3,4,5};
int *ptr=(int*)(&a+1);
cout<<*(a+1)<<endl;
cout<<*(ptr-1)<<endl;
출력 결 과 는 2 와 5 입 니 다.우선&a+1 의 의 미 를 살 펴 보 겠 습 니 다.함수 포인터
함수 포인터 란 함 수 를 가리 키 는 포인터 변수 입 니 다.C\C++프로그램 이 컴 파일 할 때 모든 함수 에 입구 주소 가 있 습 니 다.이 입구 주 소 는 함수 포인터 가 가리 키 는 주소 입 니 다.가리 키 는 함수 의 포인터 변수 가 있 으 면 이 포인터 변수 로 함 수 를 호출 할 수 있 고 함수 의 매개 변수 도 할 수 있 습 니 다.
우 리 는 먼저 함수 포인터 호출 함 수 를 보 았 습 니 다.다음 과 같 습 니 다.
int f(int x, int y) {
return x + y;
}
//
typedef int (*pf)(int, int);
int main()
{
int a = 1;
int b = 2;
// f pf
pf = f;
//
int c = (*pf)(a, b);
cout << c << endl;
}
주의해 야 할 것 은 정 의 된 함수 포인터 형식 시의 함수 서명(함수 반환 값 과 함수 매개 변수 목록 의 유형,개수,순서 포함)은 이 유형의 변수 에 할당 한 함수 서명 을 일치 시 켜 야 합 니 다.그렇지 않 으 면 예측 할 수 없 는 상황 이 많이 발생 할 수 있 고 C\C++규정 함수 이름 은 함수 입구 주 소 를 표시 하기 때문에함수 명 할당 시 함수 명 앞 에 주소 부 호 를 추가 하거나 추가 하지 않 거나 모두 같 지만 C++에서 클래스 를 찾 는 방법 함수 의 주 소 를 추가 할 때 이&기 호 는 생략 할 수 없습니다.함수 지침 은 또 다른 용도 가 있 습 니 다.바로 함수 의 매개 변수 로 서 Windows 프로 그래 밍 에서 리 셋 함수 로 서 흔히 볼 수 있 습 니 다.
typedef int (*PF)(int, int);
int f1(int x, int y)
{
return x + y;
}
int f2(PF pf, int t)
{
return (*pf)(3, t);
}
int main()
{
// f1 f2
int c = f2(f1, 4);
cout << c << endl;
return 0;
}
C++의 인용인용 이란 다른 변수 이름 을 사용 하여 특정한 메모 리 를 대표 하 는 것 입 니 다.이것 은 같은 사람 이 다른 이름 을 가 진 것 과 같 지만 어떤 이름 이 든 같은 사람 을 말 합 니 다.
int a=1;
// & , b a
int &b=a;
//b a , int c=a
int c=b;
C++규정,인용 을 정의 할 때 바로 초기 화 해 야 합 니 다.값 전달 또는 인용 전달
만약 에 변수 유형 이 기본 메타 데이터 형식 이 라면 int,float,bool,char 등 작은 데이터 형식 을 기본 메타 데이터 형식 이 라 고 부 르 면 할당 할 때 값 을 전달 합 니 다.이때 b 의 값 은 a 의 복사 입 니 다.그러면 b 를 변경 하면 a 에 영향 을 주지 않 습 니 다.그러나 변수 데이터 유형 이 복잡 한 데이터 형식 이 라면 배열,클래스 대상 이 라면 할당 할 때 전달 하 는 것 이 바로 인용 입 니 다.이때.a 와 b 가 가리 키 는 것 은 모두 같은 메모리 영역 입 니 다.그러면 a 나 b 를 변경 하 더 라 도 서로 영향 을 줍 니 다.
마지막 으로 C++에서 구조 함수 복사 대상 을 복사 할 때 주의해 야 합 니 다.기본 메타 데이터 형식 은 직접 복사 할 수 있 지만 인용 형식 데이터 에 대해 우 리 는 인용 형식의 진정한 복 제 를 실현 해 야 합 니 다.
C++의 new 키워드
c++에서 new 키 워드 를 통 해 대상 을 정의 합 니 다.대상 의 인 스 턴 스 를 직접 얻 을 수 없습니다.우 리 는 하나의 포인터 로 이 new 에서 나 온 대상 을 받 아야 합 니 다.우 리 는 이 대상 을 인용 하려 면 반드시 포인터 로 연산 자 를 인용 해 야 합 니 다->
#include <iostream>
using namespace std;
class Person
{
public:
Person()
{
}
Person(int a, int b)
{
this->m_a = a;
this->m_b = b;
}
int m_a;
int m_b;
};
int main()
{
// C++ ,per1 per2 person
Person per1;
int i = 1;
int j = 2;
Person per2(i, j);
}
C++에서 this 키 워드 는 하나의 지침 이지 자바 에서 하나의 인 스 턴 스 가 아 닌 C+에서*this 가 자바 와 같 습 니 다.
class Person
{
public:
Person(int number)
{
//C++
this->m_number = number;
}
// ,, , ,
Person& getSelf()
{
return *this;
}
int m_number;
};
총결산C/C++에 있 는 지침 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C/C+지침 이해 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1717 소수 화 점수 2 (수학)소수 화 점수 2 레이 는 수학 시간 에 선생님 의 말씀 을 듣 고 모든 소수 가 점수 로 표시 되 는 형식 이 라 고 말 했다. 그 는 녹 기 시 작 했 고 곧 완성 되 었 다. 그러나 그 는 또 하나의 문 제 를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.