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;}