P52 函数-值传递
值传递时,函数的形参发生改变,不会影响实参。
P54 函数-函数声明
先函数声明,就可以把函数定义放在main函数后面
声明可以写多次,但是定义只能写一次。
#include<iostream>
using namespace std;
int max(int a, int b); //函数声明可以写多次
int max(int a, int b);
int max(int a, int b);
int main() {
int a = 10;
int b = 20;
cout << max(a,b) << endl;
return 0;
}
int max(int a, int b) { //函数定义只能写一次
return a > b ? a : b;
}
P55 函数的分文件编写
头文件 swap.h
#include <iostream>
using namespace std;
//函数的声明
void swap(int a, int b);
源文件 swap.cpp
#include "swap.h"
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
}
mian函数可直接调用swap函数了
#include "swap.h"
int main() {
int a, b;
a = 10;
b = 20;
swap(a, b);
}
VS2022后,可以直接在头文件里定义,在源文件里引用。
P56 指针
指针就是一个地址
*p代表解引用,找到指针指向的内存中的数据
int main() {
//定义指针
int a = 10;
//指针定义的语法:数据类型 * 变量名;
int* p;
//让指针记录变量a的地址
p = &a;
cout << "a的地址为" << &a << endl; // a的地址为000000B3D3BFF8B4
cout << "指针p值为" << p << endl; // 指针p值为000000B3D3BFF8B4
//通过解引用来找到指针指向的内存,指针前加*表示解引用,找到指针指向的内存中的数据
*p = 1000;
cout << "a = " << a << endl; // a = 1000
cout << "*p = " << *p << endl; // *p = 1000
}
P58 空指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
空指针指向的内存是不可以访问的
int main() {
//空指针
//对变量进行初始化
int* p = NULL;
//空指针不能进行访问
//0-255之间的内存编号是系统占用的,因此不可以访问
*p = 100; //必报错
return 0;
}
P59 野指针
野指针:指针指向非法空间
//野指针,运行会报异常
int* p = (int *)0x1100;
P60 const修饰指针
1.const修饰指针——常量指针
2.const修饰常量——指针常量
3.const既修饰指针,又修饰常量
int main() {
int a = 10;
int b = 20;
//const修饰指针——常量指针
//指针的指向可以修改,但是指针指向的值不可以改
const int* p = &a;
*p = 100; //必报错,指针指向的值不可以修改
p = &b; //正确,指针的指向可以改
//const修饰常量——指针常量
//指针的指向不可以修改,但是指针指向的值可以改
int* const s = &a;
*s = 20; //正确,指针指向的值可以修改
s = &b; //必报错,指针的指向不可以改
//const既修饰指针又修饰常量
//指针的指向和指针指向的值都不可以修改
const int* const t = &a;
*t = 20; //报错
t = &b; //报错
return 0;
}
P61 指针遍历数组
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int * p = arr; //指向数组的指针
cout << "第一个元素:" << arr[0] << endl;
cout << "指针访问第一个元素:" << *p << endl;
for (int i = 0; i < 10; i++) {
cout << *p << endl; //使用指针遍历数组
p++; //指针向后偏移一位
}
}
P62 指针和函数
//值传递
void swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
}
//地址传递
void swap2(int *p1, int *p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main() {
int a = 10;
int b = 20;
swap1(a, b); //值传递不改变实参
swap2(&a, &b); //地址传递会改变实参
cout << "a=" << a << endl;
cout << "b=" << b << endl;
}