一开始是一些定义部分
数组
特点1:数组中的每个数据元素都是相同的数据类型
特点2:数组是由连续的内存位置组成的
int arr[] = {};
函数
如果函数不需要返回值,声明函数的时候可以写void eg. void change(形参)返回值不需要的时候也可以不用写return。一般语法 :数据类型 函数名(形参){函数体语句}
注意:
在值传递的时候,形参发生改变,但是实参不会发生改变
只有地址传递的时候,形参发生改变,实参也发生改变。
后续还有引用传递,形参发生改变,实参也发生改变。
函数声明 int max(int a , int b );(函数声明可以写多次但是函数定义只能有一次)
指针
指针是一种数据类型 32位操作系统下指针都占用4字节。 64位占用8字节
⚠ 避免使用未初始化的指针!
可以通过指针保存一个地址。 int *p = NULL;//空指针
0~255之间的内存是系统占用的,不允许用户访问;
可以通过解引用的方式来找到指针指向的内存, 指针前加*代表解引用,找到指针指向的内存中的数据.
int a = 10;
int *p = &a;
*p = a 解引用指针可以取里面地址中的内容
注:
常量指针 const int * p = &a 特点:指针的指向可以修改,但是指针指向的值不可以修改 eg *p = 20 错误
指针常量 int *const p = &a; 特点:指针的指向不可以修改,但是指针指向的值可以修改 eg p = &b 错误
const 在 * 左 → 值不可改(常量指针)。
const 在 * 右 → 地址不可改(指针常量)。
const int const *p = &a;特点:指针的指向和指针指向的内容都不可以修改
一些常见的思想
int arr[] = {1, 2, 3, 4, 5};
int *p = arr; // *p 是指向 arr[0] 的指针
数组本质上也是一个指针
p < arr + 5 :arr 是一个数组名,它本质上是指向 arr[0] 的指针,类型是 int*。
接下来是经典的冒泡排序算法,听师兄说,面试的时候会要手撕这段代码,赶紧再来回想一下这类的题型
经典题目 冒泡排序
//首先先来写冒泡排序函数的程序
void bubbleSort(int *arr , int len)
{
for (int i = 0 ; i < len - 1; i++)
{
for(int j = 0 ; j < len - 1 - i ; j++)
{
if(arr[j]>arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
//接着是显示结果的一个函数代码 这是一个显示数组中所有元素的函数 就是一个循环遍历整个数组
void printinfo(int* arr , int len)
{
for(int i = 0 ; i < len ; i++)
{
cout << arr[i] << endl;
}
}
int main()
{
int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
len = sizeof[arr] /sizeof(arr[0]);
bubbleSrot(arr , len);//这里之前写错了写成bubbleSort(int *arr , len); 调用函数的试试,不需要写数据类型,只需要传入变量名
printinfo(arr , len);
system("pause");
return 0 ;
}
主要就是冒泡排序的一个思路,一个数组如果有10个数字,那么要对这个数组进行排序,从第一个元素开始向后比较,第一轮(也就是i =0的时候) ,比较的次数就是9次 ,到第一轮的时候 最后一个数字已经是最大的了,所以比较的次数就是8次,按照上述的规律 ,到第i轮的时候 比较次数就是len - 1 - i 次,根据上述思路写for循环就可以了。
上述是我做这个题目的一个思路,做一个保留以防之后忘记。
好了好了休息差不多了,该继续学习咯,晚上回去睡觉之前还需要记录一下今天学的一个题目的代码,还得好好理解~