C语言初阶学习总结

注:个人总结仅代表自己理解,当中可能有些许错误,且有些表达不够清晰或不够准确,欢迎各位大佬批评指正!

一、各种语句

1、switch(整型表达式);case 为整型常量表达式。

2、float定义的值要加0.0f,    double只需要0.0即可。

3、strlen()所计算的字符长度不包括"\n",但是sizeof()/sizeof(...)计算的长度包括"\n",sizeof()单纯计算数组的大小有“\0”。

例如:arr[]={1,2,3,4},sizeof(arr)=4*4=16。

 sizeof为一个操作符,是计算内存大小-->占几个字节 ,其中int 4个字节, char 1个字节。

4、比较两个字符串是否相等用函数 strcmp(a,b)。a,b为两个比较的字符串。若返回0则相等。

5、rand()为生成随机数的函数,如果只写一个rand函数的话你每次运行程序你rand函数生成的随机数都是一样的,所以再rand之前还得加一个srand()函数,用来生成随机数的起点由其()里面的数字决定,所以要想每一次运行程序随机数都不一样,则在里面加入一个时间戳,即为每时每刻内部数字发生变动。

头文件为#include<stdlib.h>
              #include<time.h>
 

srand((unsigned int)time(NULL); //NULL就可以理解为0

其中rand()%(n-m+1)+m算是一个公式,记录一下方便以后查阅。

            比如产生10~30的随机整数:

           srand(time(0));

           int a = rand() % (21)+10;

6、system函数:头文件为“stdlib.h”在windows系统中,system函数直接在控制台调用一个command命令。在Linux/Unix系统中,system函数会调用fork函数产生子进程,由子进程来执行command命令,命令执行完后随即返回原调用的进程。

7、Stack overflow(这个报错表明栈溢出)。栈区:储存局部变量、函数的形参。    每一次函数的调用都会再栈区申请空间
                堆区:动态内存分配,malloc、free、calloc、realloc
                静态区:静态变量、全局变量。
8、字符串传给函数的不是字符而是传给它自己的地址!char* a;  a[]="abc"。 *a的地址并不是整个a[],而是它第一个地址的值----是a,*(a+1)才是b,以此类推。

二、数组

1、随着数组下标的增长,元素的地址,也是有规律的递增。所以结论:数组再内存中是连续存放的(一维数组)。

2、二维数组的列数不可以省略,行可以。a[][x];

3、//数组传参的时候,形参有两种写法:
     //1、数组。2、指针
     数组形式:void aa(int arr[]) 数组名本质上是:数组首元素的地址。
     注意!!!--》地址是应该使用指针来接收。所以arr这里看似是数组,本质是指针变量!!

4、数组名确实能表示首元素的地址。但是有两个例外
     1、sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
     2、&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

5、二维数组的数组名也表示首元素的地址(第一行的地址)。

三、操作符

1、若要得到小数的除法,不用整型,用浮点型:1.0/2

2、%操作符的两个操作项只能是整数。

3、<<、>>移位操作符的操作数只能是整数。**注意!!左移乘2,右移除2(为负数的话有余数加1,若为正数则直接相当于"\"号码)

4、整数在内存中存的是补码。正数 原、补、反都相同。负数反码除符号位反码取反,补码为反码加一。

5、 "^"异或操作符,异或支持交换律。交换a=3,b=5;a=a^b;  b = a^b; a =a^b;

6、b=++a  //是先++再使用,意思是把a= a+1,b=1,所以这时a是4,b也是4.
     b=a++  //是把a的值给b,意思是把a= a,b=a+1,然后b再加1,a=3,b=4;

7、&&操作符左边为假,右边就不计算了
      ||    操作符左边为真,右边就不计算了

四、指针

1、一个内存单元的大小为1byte(一个字节)。

2、32位机器的地址:32bit位-4byte,所以指针变量的大小为4个字节

3、64位机器的地址:64bit位-8byte,所以指针变量的大小为8个字节

4、令 int a= 1; int b =2; 当一个函数需要用到 a,b进行计算时:若输出的结果要改变原有的a和b的值时,则输入变量为取地址输入。
              (传址调用, 把外部变量的地址传送到函数参数中,函数内部可以直接操作函数外部变量)
               若输出的结果不需要改变原有的a和b的值时,只需正常传入a和b即可。
            (传值调用,对形参的修改不影响实参)
5、把内存单元的编号就称为地址(地址也叫指针)

6、指针类型的大小(sizeof)都是四个字节,但是指针类型在被解引用的时候访问几个字节
                                                                    1、如果是int*的指针,解引用访问4个字节
                                                                    2、如果是char*的指针,解引用访问1个字节。以此类                                                                           推
                                                                    ***意思就是,指针类型的大小指的是“门牌号”,不管你是什么类型,你的指针的门牌号的大小都一样4字节。只是门牌数字不一样。具体门内房间的大小是几个字节这就具体看指针类型了。

7、指针的类型决定了指针+-1操作的时候,跳过几个字节。决定了指针的步长。例如整型指针+1,表示向后偏移4个字节。

8、指针减指针的绝对值得到指针和指针之间元素的个数。  不是所有指针都能相减,指针指向同一块空间才能相减。
 

五、结构体

1、结构体传参的时候,要传结构体地址。

2、struct student
{
    int num;
    char name[32];
    float score;
}stu;
struct是结构体类型的关键字。struct student是用户定义的结构体类型。num,score都是结构体成员名,stu是结构体变量名。

六、杂乱知识总结

1、定义一个函数:void 表示没有返回值。int 则需要一个return 返回值。

2、数组不能自己获得一个初始值,所以每次写入一个数组时总需要先初始化数组,例如可以全部初始化为1。

4、字符串的末尾隐藏一个\0----char a[]="addad";如果是a[]={'a','b','c','c',}则没有\0。
     ------“\0”是字符串结束标志,是一个转义字符。在计算数组长度时'\0'是结束标志,不算做字符串的内容。------

5、static修饰局部变量的时候,局部变量出了作用域,不销毁。       本质上,static修饰局部变量的时候,改变了变量的 存储位置。
     例:static i=1;i++;  下一次进入函数,i不在是从1开始,而是从i++的2开始。

6、static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内存链接属性。其他源文件(.c)就不能再使用到这个全局变量了。

7、输出的对其方式:\t直接对其;%2d右对齐2位;%-2d左对齐2位。

8、数字转换成字符只需要在后面加一个'0'即可。例:1+'0'='1';

七、懒得打字附上几张图片总结

1.break&&continue

2.switxh-break

 

3.辗转相除法求最大公约数

4.整数字节

5.如何选择整数类型

6.如何选择浮点类型

7.常用字符(逃逸字符)

8.数组的大小(多少个)

9.打印数据类型

10.关键字

11、位操作符

12.冒泡排序

13、二级指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值