c语言基础汇总

关键字

存储类型

auto 自动分配空间,自动回收

register (建议)分配寄存器类型,只能32位地址,不能打印地址

static 自动初始化位0或空值,变量的值有继承性,用于修饰变量或函数,缩小作用域至函数复合语句内(内部)或该.c文件(外部)

extern 说明型 不能改变变量的值或类型,声明该变量已经在其他.c声明过了

运算符

算术运算符 +  -  *  /  % ++ --

关系运算符(逻辑值 0假1真)<  <=  ==  >  >=  !=

逻辑运算符  && (与) ||(或)!(非)

位运算符 <<  >>  ~ |

条件运算符 (1/0)?A:B 1A   0B

等号扩展 X -= 1 ---> X = X-1

逗号运算符 , 一连串逗号表达式,输出最后的值

指针 *  &

求字长运算符 sizeof(  )

强制数据类型转换 a = (类型)b

%左右都为整形数 

++ --运算符在前先运算再使用  

逻辑运算符 &&   A&&B 先判断左若为为假直接放弃判断右侧

自带函数

输入输出专题

出入输出语句

格式化输入输出函数   scanf      printf

字符输入输出函数      getchar   putchar

字符串输入输出          gets()      puts

输入输出控制字符

格式字符

d 十进制整数 x十六进制无符号整数 o八进制无符号整数 u十进制无符号整数

c 单一字符 s字符串 

e 指数形式浮点小数  f小数形式浮点小数 g e和f中较短一位

%% 输出%本身

p 地址输出

控制字符

{0}(-)m 整体宽度输出位 左 (右) 补m位 空格 {0}

.n 设置输出小数点后位数若为字符串则为输出前n位

 + 输出若为正则输出带+号

# 输出的时候带前导符 0(8)0x(16)

l  d o x u 输出精度为long型 e f g 输出精度为double型  数字后面加L 如10L 代表为 long型的10

控制流程语句

判断语句

if                                                                               switch

if(判断)                                                                  switch(判断)

        语句;                                                                {

或                                                                               case 常量1:

if(判断)                                                                              break;

        语句;                                                                  case 常量2:

else                                                                              case 常量3:

与离它最近的if配对                                                                 break;

        语句;                                                                   default:

                                                                                                 其余情况进入

                                                                                  }

循环语句

while                             do-while                  for                                                       if-goto 慎用             

while(判断)               do                           for(初始化;判断;执行 && ||)  标志词:

   循环;(1执行)     {                                 {                                                          if(判断)

                                       循环;                      循环 ;                                                 goto 标志词;

                                    }while(判断);       }                                        无条件跳转不能跨函数跳转

可以一次不执行            最少执行一次            可以一次不执行                                 可以一次不执行

跳出循环关键字

berak                               continue

跳出本层循环                  跳出本次循环

类型

基本类型

构造类型

数组专题

定义 (存储类型) 数据类型 标识符[下标]

    (static)            int           a      [10]

一维数组
初始化 

        全部初始化int a[3] = {0,1,2};

        全部初始化为0 a[3] = {0};

        部分初始化int a[3] = {0};

        static初始化 static a[3]  (直接全部为0)

起始位置

         &a[0] = a

数组越界

          a[i] = *(a+i)

          当i超过数组范围时越界但可能不报错

二维数组
初始化

             全部初始化 int a[2][3] = {1,2,3,4,5,6}; = {{1,2,3},{4,5,6}};

             按行初始化 int a[][3] = {1,2,3,4,5,6};

             部分初始化 int a[2][3] = {{1,2}{5,6}};

 地址   

                int a[2][3];

                int *p = a;

                a = &a[0][0] = p

                *(p + n) [0]= a[n][0];

                

字符数组
初始化

                单字符初始化

                char a[2] = {'a','b'};

                字符串常量初始化

                char a[] =  "adjkfgh";

                字符串结尾有\0占用一个空间

常用函数

strlen()                                              &                                                 sizeof()

到(不含)\0结束的长度                                                        含有\0的真正字符串长度

strcpy(目标,“操作字符串”(或地址))  &      strncpy(目标,“操作字符串”(或地址),最长操作长度n)

以\0结束覆盖拷贝包括\0                                                 最长覆盖拷贝n个字符包含\0

strcat(目标,“操作字符串”(或地址))   &       strncat(目标,“操作字符串”(或地址),最长追加长度n)

去掉\0进行拷贝                                                                             去掉\0进行操作

strcmp (目标1地址,目标2地址)        &           strncmp(目标1地址,目标2地址,比较前n位)

比较首字母(相同比较下一位)ascll码(1-2)                          比较前n位ascll码

结构体专题

结构体描述

同一时刻所有成员都能生效

定义放在主函数外

struct 结构体名

{

        数据类型 成员1;

        数据类型 成员2;

        ... ... 

};

结构体引用

变量名.成员名

指针->成员名

(*指针).成员名

共用体专题

共用体描述

同一时刻只能有一个成员生效

union 共用体名

{

      数据类型 成员1;

      数据类型 成员2;

       ... ...

};

枚举专题

枚举描述

同时只能有一种状态生效

enum 枚举名

{

      状态0,

      状态1,

       ... ...

};

指针

直接访问与间接访问

直接通过地址进行访问

间接通过其他的地址存储的对应地址进行访问

空指针与野指针

空指针 int *p = NULL; 防止产生野指针,编译时报错,0号空间不分给任何空间

 野指针 int *p ;

空类型

void *p;需要强行转化

指针与数组
一维数组

                int a;

                int *p = &a;

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

二维数组
取*降维

                取*之后将二维降为一维数组

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

                int a[2][3];

                int *p = a;

                a = &a[0][0] = p

                *(p + n) [0]= a[n][0];

字符数组

                char *str = "china";

                这时str指向的是一个字符串常量不能进行strcpy等操作

                应为str = "abcde";进行改变

                

const与指针
常量指针

        指针指向可变 值不能变

                const int *p

                int const *p

指针常量

        指针值可变 值能变 

                int *const p

        const int *const p 都不可变

指针数组与数组指针
指针数组

                int *p[3]

                p是一个数组,组内三个元素,每个元素都是一个指针

                

数组指针

                int (*p)[3] ->(int [3] *p)

                p是一个指针,指向一个数组,数组内是三个整型数据

                一次移动int[3] 大小的地址

               二维数组应用

                int a[2][3];

                int (*p)[3] = a;

                则a与p完全等价

函数指针 指针函数 函数指针数组
                函数指针 

                指向函数的指针

                类型 (*指针名) (形参)

                int (*p)(int)

                例

                #include <stdio.h>

                int test(int a,char b)

                {}

                int main()

                {

                int (*p)(int,char);

                int a;char b;

                p = test;

                p(a,b);

                }

                指针函数 

                返回指针的函数

                返回值 *函数名(形参)

                int *fun(int)

                函数指针数组 

                指向函数的指针构成的数组

                类型  (*数组名[下标])(形参)

                int (*arr[N])(int)    

                例

                #include <stdio.h>

                int test1(int a,char b)

                {}

                int test2(int a,char b)

                {}

                int main()

                {

                int (*arr[2])(int,char);

                int a;char b;

                int c;char d;

                arr[0] = test1;

                arr[1] = test2;

                arr[0](a,b);

                arr[0](c,d);

                }

                            

疑难杂症

利用函数给指针分配空间


1.将指针的地址传入函数中,int *p;  func(&p);
2.使用指针接收函数的返回值, int *p = func();
3.将指针设置成全局变量。

注意上述1.指针的地址,int *p; p的地址就是&p,那么接收这个地址的变量就必须是二级指针 int **p;
 

函数

函数的传参

1值传递2地址传递

格式

 数据类型 函数名 (数据类型  形参名,数据类型  形参名,数据类型  形参名)

函数声明

                当函数在main()下面的时候需要先将函数进行声明

                如

                #include <stdio.h>

                void make();

                int main()

                {

                }

                void make()

                {

                }                                                                                                                                                                                                                                                                                                        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值