C++ 一些学习笔记(一)
主要是针对之前学习C的时候一些知识点的遗漏的补充,还有一些我自己觉得比较重要的地方。
本文章的主要内容是关于指针的。
1.函数的分文件编写
1.创建后缀为.h的头文件
2.创建后缀为.cpp的源文件
3.在头文件中写函数的声明
4.在源文件中写函数的定义
5.使用时调用头文件
2.指针
指针的作用:可以通过指针间接访问内存
在32位操作系统下,指针占用4个字节;在64位操作系统下,指针占用8个字节。
- 内存编号是从0开始记录的,一般用十六进制来表示
- 可以利用指针变量保存地址
指针的格式:
1.定义指针
int a =0;
//指针定义的语法:数据类型*指针变量名;
int *p;
//让指针记录变量a的地址
p=&a;//&为取址符
//int*p=&a;
2.使用指针
//可以通过解引用来找到指针指向的内存,指针前加*代表解引用,代表指针所指向内存中的数据
*p;
3.指针占用的内存
不管是什么数据类型,在32位操作系统下,指针占用4个字节;在64位操作系统下,指针占用8个字节。
sizeof(int*);
sizeof(p);
4.空指针和野指针
空指针:指针指向内存编号中为0的空间
用途:初始化指针变量
注意:空指针指向的内存不可访问(0-255之间的内存编号是系统占用的,不可访问)
野指针:指针指向非法的内存空间。
程序中要避免出现野指针。
3.const修饰指针
const修饰指针的三种情况:
- const修饰指针:常量指针
- const修饰常量:指针常量
- const既修饰指针,又修饰常量
1.const修饰指针——常量指针
const int*p=&a;//常量指着
常量指针的指向可以修改,但是指针指向的值不可以修改;
2.const修饰常量:指针常量
int*const p=&a;;
指针的指向不可以更改,但是指针指向的值可以修改;
3. const既修饰指针,又修饰常量
const int*const p=&a;
指针指向的指向,指向的值都不可以修改;
4.指针和数组
利用指针访问数组中的元素
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int*p=arr;//arr就是数组首地址
cout<<"利用指针访问第一个元素:"<<*p<<endl;
p++;//让指针向后偏移4个字节
cout<<"利用指针访问第二个元素:"<<*p<<endl;
5.指针和函数
void swap01(int a,int b)//实现两个数字进行交换
{
int temp=a;
a=b;
b=temp;
}
void swap02(int*p1,int*p2)//实现两个数字进行交换,实际上交换了数据存放地址里的值
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
int main(){
int a=10;
int b=20;
//swap01(a,b);//1.值传递
swap01(&a,&b);//2.地址传递
}
1.值传递不能改变实参
2.地址传递可以改变实参
总结:如果不想修改实参,就用值传递;如果想修改实参,就用地址传递。
6.指针、数组、函数
案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排列
//冒泡排序函数
//冒泡排序
#include <iostream>
using namespace std;
//冒泡排序函数
void bubbleSort(int*arr,int len)//参数1 数组首地址,参数2 数组长度
{
for (int i=0; i<len; i++) {
for (int j=0; j<len-i-1; j++) {
if (arr[j]>arr[j+1]) {
//如果将j>j+1 交换数字
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
void printArray(int*arr,int len)
{
for (int i=0; i<len; i++) {
cout<<arr[i]<<endl;
}
}
int main()
{
int arr[10]={4,2,8,0,5,7,1,3,9,10};//创建数组
int len=sizeof(arr)/sizeof(arr[0]);//数组长度
bubbleSort(arr, len);//创建函数实现冒泡排序
printArray(arr,len);//打印
return 0;
//
}