1.可以用
int a = 10;
int *p = &a;
if(p != NULL)
...
else(或没有else也行)
...
来达到一个 如果p是空指针那就不使用它,是非空指针那就使用它 的目的
2.assert()括号中如果条件为假那就会报错,而且加入此语句的话会对程序的运行拉长时间
3.统一关闭assert()方法:在#include<assert.h>上一行添加
#define NDEBUG
还有就是:在release版本里边,一般会将assert禁用掉
4.建立一个字符数组例子:
char arr[ ]= "asdfgh";
5.strlen函数返回的值是size_t类型(这类型用%zd打印)
6.const能固定值
7.size_t就是unsigned int
8.int arr[10]= { 0 };
&数组名 取出的是整个数组的地址,(这里的数组名表示整个数组的地址)
除了那两种情况外,其他的数组名都指的是数组首元素的地址
&arr[0]与arr
一样
三者区别可以体现在地址的++上边
&arr[0]与arr同时加了4
&arr加了40
9.对代码
int arr[10] = { 0 };
int *p = arr;
此时p<==>arr
10.对数组和指针因为之间的关系而产生的一些别的表达形式在微信(搜数组与指针衍生式子)
11.在主函数中创建了一个一维数组而后将它传输到函数中,而函数又用的是类似于int arr[ ]这样的式子来接收,那么接收到的也只是一个数组首元素的地址而已,而且此时在函数形参那里其实没有创建数组,这里的int arr[ ] 本质上还是个指针。所以sizeof(arr)计算的是指针arr的大小。不过形参那里可以写成指针的形式(int *p),也可以写成数组的形式(int arr[ ])。二者只是形式上有所差异,本质上还是 完全相同 的,都是指针
12. 对整形数组arr,在编译器看来arr[i]等价于*(arr+i),即先将前者转化为后者再进行下一步操作
13.所以最好一定要在主函数中计算好数组的元素个数sz再将之传给函数,这样函数才能打印数组之中的全部元素
14.数组传参时传的都是数组首元素的地址,做不到传递整个数组
15.冒泡排序详解在微信(搜冒泡排序)