1.assert(条件);
一旦条件为假则报错
2.统一关闭assert方法:
在#include<assert.h>
上一行加上#define NDEBUG
3.但是引用assert会增加程序运行的时间
4.size_t等价于unsigned int
5.关于数组首元素的地址
两个特例:
sizeof,&数组名
6.
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
int* p = arr;
int i = 0;
return 0;
}
上述代码中, p == arr;
因此,arr[i] == p[i];
*(p + 9) == *(arr + 9);
arr[i] == i[arr],
而arr[i] == *(arr + i).
7.将一个数组传给函数后,不能在函数内部求数组的元素个数
因为给函数传数组时,传递的并非数组,而是数组首元素的地址
而在函数接收数组的形参那里,用的是指针来接收而并非用数组来接收
8.数组降级指的是数组变为了数组首元素的地址
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
int func1(int arr[])
{
return 0;
}
int main()
{
int arr[10] = { 0 };
func1(arr);
return 0;
}
上述代码中,数组降级了
9.冒泡排序:
相邻的两个元素进行比较,如果不满足顺序就进行交换
代码例子:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int func1(int arr[], int sz)
{
int i = 0;
int j = 0;
int tem = 0;
for (j = 0; j < sz - 1; j++)
{
for (i = 0; i < sz - 1 - j; i++)
{
//两两比较
if (arr[i] > arr[i + 1])
{
tem = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tem;
}
}
}
}
int main()
{
int arr[] = { 2,3,6,5,9,8,5,3,26,9,1,4,72 };
int sz = sizeof(arr) / sizeof(arr[0]);
func1(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
效率得到优化后的冒泡排序:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int func1(int arr[], int sz)
{
int i = 0;
int j = 0;
int a = 1;//1要继续,0要结束
int tem = 0;
for (j = 0; j < sz - 1; j++)
{
a = 0;
for (i = 0; i < sz - 1 - j; i++)
{
//两两比较
if (arr[i] > arr[i + 1])
{
tem = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tem;
a = 1;
}
}
if (a == 0)
{
break;
}
}
}
int main()
{
int arr[] = { 9,0,1,2,3,4,5,6,7,8 };
int sz = sizeof(arr) / sizeof(arr[0]);
func1(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}