强行复习第三天:c语言(下)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mirror1997/article/details/87967622

说好的段位不刷了嘛。。。。

复习归复习,题还是要刷啊喂!

明天就开始上课了。。。时间越来越紧了。。。

公众号里好多该更新的都没更。。。欠了一个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;    //可以

指针数组:

猜你喜欢

转载自blog.csdn.net/Mirror1997/article/details/87967622