说好的段位不刷了嘛。。。。
复习归复习,题还是要刷啊喂!
明天就开始上课了。。。时间越来越紧了。。。
公众号里好多该更新的都没更。。。欠了一个app推荐,欠了一个流浪地球影评,欠了个黑寡妇个人向分析,还有一个预支出去了的复联四。。。
哦,对了,还想写一个乐园系列来着,仙女乐园写完了,还有妖精乐园想写。。。外加还想推荐点男歌手来着了。。。
林俊杰也没写。。
那个很棒的对比向idea也没写。。。
妈呀。。。
我有罪。。。
是不是还想做个漫威燃向混剪来着。。。
我还有好多材料没准备,还要复习,要刷题,要担心成绩还要照顾身体(笑哭)
比主席还忙~
加油吧,着手眼下,先做重要的。
先把c语言看完~
数组的一些语法细节:
int arr+[4+1] //是合法的
#define NUMBER 5
int arr[NUMBER]; //是合法的
int n;
…
int arr[n] //变量定义 不合法
int arr[5]={1,2,3}; //这种方法不常用,前三个赋值1,2,3,后面自动赋值为0
int arr[]={1,2,3}; //数组自动大小为3
int arr[3][4] //三行四列
int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //注意大括号之间的逗号
int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //也行
int arr[3][4]={{0,1},{0,0,2},{3}};
结果是 0 1 0 我也不知道为啥要用这么鬼畜的方式赋值,反正这样是可以的。。。
0 0 2
3 0 0
int arr[][3]={1,2,3,4,5,6,7,8,9}; //可以
int arr[3][]={1,2,3,4,5,6,7,8,9}; //就不可以,你说气不气嘛
不过是有原因的,因为有上面那种鬼畜的复制方式,你只告诉我三行,谁知道你怎么划分的,有没有省略嘛。。。
int arr[3][4]可以看成3个长度为4的一维数组不假,不过。。。
凭什么对行和列双标!猪蹄子。。。
千呼万唤始出来的函数:
函数定义:把相关的语句组织起来,并给他们注明相应的名称,利用这种方法把程序分块,这种形式的组合就称为函数。也称例程或过程。
体现了结构化和分而治之,写完之后也觉得清晰清爽了不少,适合整理狂和强迫症陶冶身心。
void add(int arr[3])
{……}
数组中的值也跟着改变,原理很简单,因为形参接受的是实参的首地址,而操作的是这个地址指向的数据,当然会发生更改。就像多配了一把钥匙,你就能从那个屋子里随意取东西啦。
递归,即自我调用。怎样停下来是关键
c语言的存储空间分为三部分:代码区、静态存储区、动态存储区
变量的存储方式分为:静态存储和动态存储两种
静态存储变量:编译时就分定存储单元并一直保持不释放,直至整个程序结束,如全局变量。包括外部变量和静态变量
动态存储变量:在程序执行过程中,使用到时才分配存储单元,使用完毕立即释放,如函数的形参。包括自动变量和寄存器变量。
自动变量(动):类型说明符auto,未说明的变量都默认自动变量
外部变量(静):类型说明符extern,就是全局变量。全局变量站在作用域角度提出,外部变量站在存储方式角度提出。
一个源文件file1.c中定义int a;
在另一个源文件file2.c中声明extern int a; 就表示这些变量已经在其他文件中定义,不再为他们分配内存空间
静态变量(静):类型说明符static,静态变量属于静态存储方式,但是静态存储方式不一定是静态变量。
外部变量虽然属于静态存储方式,但不一定是静态变量,必须加static之后才能成为静态全局变量。
……怎么这么乱!不写了。
画一个思维导图就好了,如下:
内部函数:
static int f(int i,int j) //本文件使用
外部函数:
extern int f(int i,int j) //整个程序有效
c语言万恶之源之指针:
&:取地址符
*:指针运算符,取指针指的变量
指针居然可以用0赋值,代表空指针。。。我怎么不记得我学过这句。。。
这有一个优先级的问题要注意:
*pi++:因为++和*同级,结合方向自右向左,等价于*(pi++)
*++pi:等价于*(++pi)
对于一维数组 int iarr1[4]={1,2,3,4};
iarr是一个其数组元素类型的常量地址,即int型的常量地址,则iarr1+1的值会跳过一个数组元素,即4字节
对于二维数组int iarr[3][4];
iarr的数组元素是iarr[i],所以iarr是大小为4的一维数组型的常量地址,则iarr+1会跳过一个数组,即4*4字节
*(iarr+i)代表取出第i个元素
要记住,分清arr、arr[i]、arr[i][j]是啥
数组指针:
一维:
int iarr[4];
int *pia;
pia=iarr; //可以
二维:
int iarr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*pia)[4];
pia=iarr; //可以
指针数组: