1 소프트웨어 컴파일
비주얼 스튜디오
2 기본문법
2.1 포인터
2.1.1 포인터 사용
//定义一个指针
int a = 10;
int * p;
//让指针记录变量a的地址
p = &a;
cout << "a的地址:" << &a << endl;
cout << "p:" << p << endl;
cout << "p:" << *p << endl;
//使用指针
//可以通过解引用的方式来找到指针
*p = 1000;
cout << "a的地址:" << a << endl;
cout << "p:" << *p << endl;
2.1.2 포인터 메모리
32비트 OS에서는 4바이트, 64비트 OS에서는 8바이트를 차지합니다.
64비트로 변경 후 포인터의 메모리는 8비트
2.1.3 널 포인터
포인터 변수는 포인터 변수를 초기화하기 위해 메모리의 0번 공간을 가리키며, 널 포인터가 가리키는 메모리는 접근할 수 없다.
//定义一个指针 指针变量指向内存地址为0的空间
int * p = NULL;
//访问空指针报错 内存编号为0-255为系统占用 不允许用户访问
*p = 100;
cout << "p:" << p << endl;
cout << "*p" << *p << endl;
2.1.4 필드 포인터
포인터 변수가 잘못된 메모리 공간을 가리킴
널 포인터도 와일드 포인터도 우리가 적용한 메모리 공간이 아니며 둘 다 액세스할 수 없습니다.
2.1.5 const 수정 포인터
const 수정 포인터: 상수 포인터
포인터의 포인팅 수정 가능 포인터가 가리키는 값 수정 불가
const 수정 상수: 포인터 상수
포인터의 포인팅은 수정할 수 없지만 포인터가 가리키는 값은 수정할 수 있습니다.
const는 포인터와 상수를 모두 수정합니다.
포인터도 포인터가 가리키는 값도 수정할 수 없습니다.
2.1.6 포인터와 배열
2.1.7 포인터와 함수
Pass by value : 실제 매개변수를 변경하지 않음
주소 전달 : 실제 매개변수의 값이 수정됩니다.
2.2 구조
2.2.1 구조체 정의 및 생성
사용자가 다양한 데이터 유형을 저장할 수 있는 사용자 정의 데이터 유형
여러 가지 생성 및 사용 방법, struct는 구조체 객체 생성 시 생략 가능하나 정의 시 생략 불가
2.2.2 구조 배열
사용자 지정 구조를 배열에 넣습니다.
2.2.3 구조 포인터
멤버를 호출하는 객체는 멤버가 힙에 있는지 스택에 있는지에 따라 "." 또는 "->"를 사용하고 힙에서 ->를 사용하고 스택에서 .을 사용합니다.
2.2.4 구조 중첩 구조
Teacher에서 학생 구조를 사용하려면 먼저 학생 구조를 생성해야 합니다.
2.2.5 함수 매개변수로서의 구조
주소이전에서도 main함수의 값이 변하고, 값이동에서는 Main함수의 값이 변하지 않음을 알 수 있다.
2.2.6 구조체의 Const 사용 시나리오
함수의 형식 매개변수를 포인터로 변경하면 메모리 공간이 줄어들고 새 복사본이 만들어지지 않습니다. 그러나 실제 매개변수의 데이터가 수정되는 것을 방지하기 위해 데이터 앞에 const를 추가하면 실제 매개변수가 수정되지 않도록 문제를 해결할 수 있습니다.
2.3 참고문헌
역할: 별칭 변수 데이터 유형 & 별칭 = 원래 이름
참조와 원래 이름은 동일한 메모리를 가리킵니다.
2.3.1引用的注意事项
1 引用必须初始化
2 初始化后不能被改变
2.3.2引用作函数参数
函数传参时,可以利用引用让形参修饰实参,简化指针修改实参
在值传递中,不能改变实参的值,地址传递可以改变实参,引用传递也可以。
2.3.3引用作函数的返回值
引用的本质是一个指针常量,指针的指向不可以修改,但是指针指向的值可以修改。
不要返回局部变量的引用
函数的返回值是一个引用,那么函数的调用可以作为一个左值。
2.3.4常量引用
用来修饰形参防止误操作
引用必须指向一个内存空间,栈区或者堆区,不能是常量区中的。
加一个const常量就可以解决问题,相当于先创建一个temp=10,然后将引用指向temp
int a = 10;
const int & ref = 10; //int temp=10; const int & ref = temp;