c语言笔记

第一章 基本知识梳理

一、C程序结构

1、C不提供输入输出语句,需要采用函数的形式

      #include <stdio.h>

      #include “stdio.h”

      • #:预处理标志符

      • include:文件包含

      • stdio.h:扩展名为.h的是头文件,标准输入输出函数库

      • <>和"":搜索路径不同,<>是系统路径下查找,""先在当前目录下查没有再去系统路径

2、注释://单行注释  /* */多行注释

3、C程序的特点

    (1)1个C程序由一个或多个源文件(.C)构成

    (2)函数是c程序的基本组成单位,每个源文件可包含若干函数

    (3)一个c程序必须且只包含一个main( ),从main开始执行并结束于main

4、C程序的运行

      编辑源文件.c——编译成目标程序.obj——链接成可执行程序.exe——执行

5、数据在内存的存放方式

     ①原码、反码、补码

         正数:原码=反码=补码

         负数:原码:该数的二进制

                    反码:符号位不变,按位取反

                    补码:符号位不变,反码+1

     ②存放方式

         整型:二进制补码形式,4个字节

         字符型:ASCII,1个字节

     ③数值范围

         假设整型占2字节:-32768~32767 无符号数:0~65535

二、基本数据类型

1、数据类型

      整型、字符型、实型、枚举

2、标识符、常量和变量

(1)标识符的命名规则

   ①只能包含字母、数字、下划线,不能以数字开头

   ②不能使用关键字

        main、integer不是关键字 

        C没有I/O函数,printf等不属于C的关键字

1f1136af239446298d398a6b71e1026f.jpeg

   ③区分大小写,最好取具有一定意义的

(2)常量

程序运行过程中其值不能改变的量

f4c10c7f5136441296ba710898b6ec6f.png

(3)变量

其值可以改变的量

 ①注意以下规则

     • 同级变量不可重名

     • 变量必须先定义后使用

②变量类型

    整型、字符型、实型、指针

③在内存中的存放形式

    整形:补码 字符型:ASCII码 实型:无精确值

变量初始化:定义的同时赋值

    变量必须先定义在使用,没有初始化的值为随机数

3、各种类型数据混合运算结果为高类型

4、强制类型转换

      格式:(类型名) 表达式

      注意(float)  22/5 与(float)(22/5)不同

    (float)  22/5:把22转为22.0再除5=4.4

    (float)(22/5):把22/5的值转为实型=4.0

三、运算符和表达式

1、运算符

68f3d3f6c6c74225a508fc92bc92c3a5.png

2、结合性

      右结合:单目、三目(条件运算符)、赋值

      左结合:除了右结合剩下的都是左结合

3、优先级(由高到低依次排列)

      4479b47bcf044786a33f8a1e8bf7e237.jpeg

第二章 编程部分

一、C语句的分类

d67a6617d2904021af4a8ef6b3dba343.png

二、标准输入输出函数

1、输入输出函数

f54646bda1634a5c82d042a21d275302.png

:连续输入多个字符时,中间不用空格或回车

2、格式输入输出函数

    (1)printf()

             ①一般形式:printf("格式控制字符串",输出表列)

             ②格式控制字符串

                1594723b1590438383fa9c675be4c59b.png         

                 %m:指定输出宽度

                 • 数据宽度>m,按实际宽度输出

                 • -m左对齐右补空格,+m右对齐左补空格

                  %.nf:指定小数位数,采用四舍五入,小数点后默认6位

                  %.ns:对于字符串来说就是取多少个字符

     (2)scanf()

              ①一般形式:scanf("格式控制字符串",地址列表)

              ②数字之间没有普通字符时可以通过空格、回车、tab键分隔

三、程序的三种基本结构

1、程序结构

      if、for、while默认只负责一条语句

4372fef2839f4e849270f32f51f2816a.png

2、continue和break的区别

  • continue:结束本次循环,执行下次循环
  • break:结束整个循环,还可用于switch语句

第三章 数组

一、数组的概念

数组:具有相同数据类型的变量集合

数组名是数组的首地址,是常量

在内存中连续存放,二维数组按行存放

数组元素只能分别赋值,不能整体赋值

• 先定义后赋值和初始化的区别

   -先定义后赋值:数组元素的值是随机数

   -初始化:没赋值的元素默认为0或/0

• 对全部数据赋值

   -一维:可以省略下标

   -二维:只能省略一维下标

• 单个字符赋值没有\0,字符串赋值有\0

   char c[]=''a'',''b'',''c'' //单个字符赋值没有/0

   char c[]=''abc''        //字符串赋值有/0

• 数组不能整体使用

   int a[3];

   scanf(“%d”,a)  //错误,a是常量

   a={123}  //错误,a是常量不能赋值,等号左边必须是变量

   必须一个个元素赋值

二、数值数组

:未初始化元素值随机

1、一维数组

 (1)定义

          类型 数组名[整型常量表达式]

(2)引用

         数组名 [下标,从0开始到n-1]

2、二维数组

(1)定义

         类型 数组名[常量表达式1][常量表达式2]

(2)初始化

         类型 数组名[常量表达式1][常量表达式2]={{值},{值}}

         :可以省略行标

三、字符数组

1、定义

char 数组名[数组长度]

2、引用

数组名 [下标]

3、初始化

单个字符赋值没有\0,字符串赋值有\0

未初始化元素值为\0

四、字符串处理函数

1、字符串输入函数

①scanf("%s",字符数组)

• 输入的字符串里不能包含空格回车TAB

• 末尾自动加\0

• 输入串长度应小于字符数组长度

②gets()

• 输入的字符串里可以包含空格

• 末尾自动加\0

• 以回车结束

• 输入串长度应小于字符数组长度

2、字符串输出函数

①printf("%s",字符串地址)

• 依次输出字符串中的字符遇到\0结束 

  char c[10]=''abc''

  printf("%s",&c[1])   //bc

②puts(字符串地址)

• 输出完字符串能自动换行

ca744561e79145a396c4e94bb70bcaf4.png

第四章 函数

一、函数定义

不能嵌套定义,可以嵌套调用

1、无参函数定义

      类型 函数名() { ... }

2、有参函数定义

      类型 函数名([形参])//函数返回类型没有定义时默认为int型

      {

       声明部分

       执行部分

       [return 表达式]  //如果有返回值通过return返回

      }

     :形参中必须分别定义两个形参的数据类型

二、函数的调用

1、主调函数:主动去调用其它函数

      被调函数:被其它函数所调用

      主函数可以调用子函数,子函数可以调用子函数,但子函数不可以调用主函数

2、 函数必须先定义或声明后才能被调用

(1)声明

被调函数在主调函数之后

①被调函数首部加分号

    int max(int x,inty );

②int max (int,int);

(2)定义

被调函数在主调函数之前(如:int max()在main()函数前)

3、函数调用的一般形式

(1)有返回值的函数调用

          ①函数表达式

              x=函数名(实参)//x=max(m,n)

          ②作为函数参数

              printf("%d",max(x,y))

(1)无返回值的函数调用

          void 空类型

          函数名(实参)

三、函数的参数

  • 实参与形参在数量、顺序要一致
  • 没有函数调用时,形参不占用内存;函数调用时,为形参分配内存。形参与实参占用不同的内存单元,调用函数执行后,形参释放内存
  • 函数的返回值最高只有1个

0e905c5bb18d43fdac4915e95aed9ba3.jpeg

传址:数组名、指针

第五章 变量的作用域与存储类型

一、变量的作用域

4221dc3b390b4130806918b3b59afcba.jpeg

二、存储类型

 8965197a09c4444eae515f232785f192.jpeg第六章 指针

一个变量的地址

一、定义

类型 *变量名    //带数据类型的一定是定义

二、赋值

1、初始化

    类型 *变量名=&地址名;

    :未初始化的是野指针,不能用

2、赋值

     类型 *变量名;

     变量名=&地址名;

三、指针与数组

数组名是数组的首地址 常量不能参予运算 无&

1、一维

(1)地址

          &a[i] &p[i] a+i p+i p++
(2)数值

          a[i] p[i] *(a+i) *(p+i) *(p++)

(3)几个式子的含义

           *p++:等价于*(p++) //*单目右结合

           (*p)++:内容加加 //先输出内容在加加

2、二维

(1)元素

         *(a[i]+j):a[i][j]的元素

         *(*(a+i)+j):a[i][j]的元素

(2)地址

          a[i]:a[i][0]行

          a[i]+j、*(a+i)+j:a[i][j]的地址

二维数组地址有一个* 元素有两个*或*[]、[][]
       一维数组地址无* 元素有一个*

       a[i][j]=*(p+i*列数+j)

(3)理解与区分

          ( *p)[m]:指向含有m个元素的一位数组

           //指针移动一行

(4)重要结论

        int a[3][4],(*)p[4];p=a;

       &a[i][j]=a[i]+[j]=p[i]+j=*(a+i)+j=*(p+i)+j

       a[i][j]=*(a[i]+[j])=p[i][j]=*(*a+i)+j)=*(*p+i)+j)

指向字符数组时可修改字符数组内容

        指向常量字符串时不可修改

第七章 结构体与共用体

  • int型16位机2字节 32位机4字节
  • 结构体内存:所有成员加在一起
  • 共用体内存:成员最大字节数

一、结构体

1、结构体:自定义数据类型,把不同数据类型组合成一个整体

2、结构体的定义

      struct 结构体类型名

      { 

       成员表列;

      };

2、结构体变量/数组/指针的定义、初始化和成员引用

(1)结构体变量/数组/指针的定义 

         ①先定义结构体类型在定义变量名

             struct 结构体类型名

             { 

               成员表列;

             };

             struct 结构体类型名 变量名/数组名[ ]/*指针名

         ②定义结构体类型的同时定义变量名

             struct 结构体类型名

             { 

               成员表列;

             }变量名/数组名[ ]/*指针名

         ③直接定义结构体类型变量(无结构体名)

             struct 

             { 

               成员表列;

             }变量名/数组名[ ]/*指针名

(2)结构体变量/数组/指针的初始化

         什么类型的变量给什么类型的初值

         各成员与值一一对应

(1)结构体变量/数组/指针的引用

         结构体变量名.成员名

       (*指针名).成员名

         指针->成员名

二、共用体

是指几个不同的变量占用同一段内存的数据类型

1、共用体的定义

      union 共用体类型名

      {

       ....

      };

2、知识点

• 同一内存在每一瞬时只能存放其中一种类型的成员

• 起作用的是最后一次存放的成员

• 只能对第一个成员初始化

三、类型定义符typedef

可以自己定义类型名(相当于重命名)

typedef 原类型名 新类型名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值