C基础(数据、输入输出、运算符及优先级、结构控制、数组、多级指针、函数相关、内存管理、Linux关键字)笔记总结-day5

目录

前言

一、数据

1.基本类型

2.常量与变量

2.1 常量与变量

2.2 作用域

2.3 存储模型

3. 预处理

二、输入输出

1.数据的输出输入

2.1 字符输入输出

2.2 格式化输入输出

3.字符串输入输出

三、运算符及表达式

1.运算符及表达式

1.1 算术与赋值运算符

1.2 逗号与位运算符

1.3 关系与逻辑运算符

1.4 sizeof操作符与条件运算符

2.运算符优先级

四、结构与控制

1.C语言程序结构

2.C语言控制语句

2.1 条件判断

2.2 循环语句

五、数组

1.一维数组

1.1 定义与引用

1.2 初始化和内存分配

2.多维数组

2.1 定义及初始化

2.2 使用与内存分配

3.字符数组与字符串

3.1 定义与输入输出

3.2 字符串处理函数

六、指针

1. 指针基础

1.1 定义赋值与使用

2. 指针运算

2.1 关系与算术运算

2.2 空指针   NULL

3. 指针、数组、函数

3.1 指针与一维数组

3.2 指针与多维数组

3.3 指针与函数

4. 多级指针

4.1 定义与引用

4.2 多级指针运算

七、函数

1.函数基础

1.1 定义声明

1.2 调用与传递

2.指针函数与函数指针

2.1 定义使用与声明

2.2 函数指针类型与数组

3.递归与回调函数

3.1 递归定义与说明

3.2 形式与条件

3.3 回调定义与机制

3.4 递归回调使用实例

八、自定义数据类型

1.结构体

1.1 定义、声明及使用

1.2 结构体数组与指针

2.位域

2.1 定义及说明

2.2 位域的使用

3.共用体与枚举

3.1 共用体

3.2 枚举定义与使用

九、C语言的高级用法

1.内存管理

1.1 动态内存管理与函数

2.堆与栈

3.常见关键字总结

3.1 static、const

3.2 extern、宏定义、typedef

3.3 volatile、register、memory

总结



前言

自我思考,总结C语言基础的数据语法、函数、定义以及使用方法,例如:数制、运算符、字符与字符串、数组、常用函数、指针、结构体,将梳理C语言的整体。


一、数据

我认为数据是信息的线上的载体,数据包括了数字、图片、文字、视频等等。

1.基本类型

数据的类型:基础类型      空类型     构造类型

基础类型:整型、字符型、浮点型、枚举型(enum)、指针类型

空类型:void  它是一种特殊的类型,是所以数据类型的基础,常用在数据类型的传递参数与类型转换中

构造类型:数组、结构体、共用体(union),它由基础类型复合而成的类型

以上基础类型都分有符号(signed)与无符号(unsigned),有无符号指有无正负(+ -),这决定这取值范围和有效数字。

例如:有符号 int 取值范围:2^(-32) ~ 2^(+32)  而无符号 int 取值范围:0 ~ 2^(32) 曲二者的交集可提高程序的可移植性,这在编程中是很重要的

2.常量与变量

常量是程序运行中不可更改的量 。

类型:整型(2进制、8进制、10进制、16进制,以二进制存储在电脑内存中)、字符型常量(以单引号括起来的单个字符,以ASCII存储在电脑内存中)

同理变量就是可更改的量,例如基础类型变量 int a

2.1 常量与变量

在C语言中,规定语法为:先定义、后使用,任何变量使用前都必须遵循

常量的定义,需要const 关键字

2.2 作用域

根据变量的作用域不同,区分了局部变量和全局变量,局部变量就是定义在函数内部的变量,全局变量则在函数之外。

不同点:未赋初值时,全局变量系统自动赋值为0,只能定义一次,作用范围为整个函数,生命周期直到整个函数的结束;局部则自动赋值为随机数,作用范围只在定义的函数内部有效,函数调用结束则局部变量结束

当局部变量与全局变量重名时,局部变量有效。

2.3 存储模型

静态存储变量:编译时分配内存空间且保存不变,直到整个程序的结束,全局变量就属于静态存储

动态存储变量:运行时才分配内存空间,使用完成后立即释放内存空间。

static 静态类型说明符  有static修饰的才是静态变量,具有静态存储、内部链接

                         静态全局变量:未赋初值自动 0,作用域:整个函数 生命周期:整个函数结束为止

内部链接,即不可被其他源文件引用。

                          静态局部变量:随机数 作用域:定义函数内 生命周期:由函数内扩展到整个函数

内部链接              动态变量:动态存储,外部链接。

3. 预处理

1.将.h文件替换到被预处理的文件中  2. 将宏定义替换 3. 清除所有的注释

二、输入输出

1.数据的输出输入

2.1 字符输入输出

putchar()字符输出函数   getchar()字符输入函数

2.2 格式化输入输出

int printf( const char * format....) 格式化输出函数  format 为指定输出格式,.... 为不定参

成功返回输出的字符数 失败返回 -1(EOF)

scanf()格式化输入函数

3.字符串输入输出

puts()字符串输出函数,成功在终端显示字符串,失败 -1(EOF) 

gets() 字符串输入函数,成功从键盘读取输入的字符串放入字符数组中且自动加 '\0' ,失败返回NULL

三、运算符及表达式

1.运算符及表达式

1.1 算术与赋值运算符

 算术运算符:加减乘除取余(+  -  *   /  %) 赋值运算符:= 

类型转换: 自动转换  赋值转换  强制类型转换    % 两边只能是整数  

赋值运算符是将   左=右  右边的赋值给左边   

1.2 逗号与位运算符

逗号运算符:,位运算符:<<  >> & | ^  ~ 

逗号运算符 ,是把表达式连接起来组成一个表达式  y=(x=3+4),(5+6)  问y是多少? y是11.

位运算符常用于硬件信号中,例如 把某个bite位  置1  置0

置1: a |= (1<<i)    置0: a &=(0<<i)      a<<3 表示a整体扩大2^3 倍;a>>3 即缩小2^3 倍

1.3 关系与逻辑运算符

关系运算符:> < ==  >= <= !=  逻辑运算符: &&  ||  !

逻辑运算符: &&  同真为真 一假为假

                       ||      一真为真  同假为假      !真为加  加为真     在C语言判断中非零即为真

1.4 sizeof操作符与条件运算符

求字节运算符:sizeof()  求变量(类型大小即变量大小,32位中所有指针变量大小都为4bite)、数组(数组元素个数 x 数组类型大小)、结合体的占空间内存大小,单位:比特 

条件运算符:条件?  a:b   C语言唯一的三目运算符  如果条件为真 执行a ,如果条件为假则执行b

也可以用条件语句(if() switch() )来替换实现它的功能。 

分量运算符: .  ->  结构体访问成员变量使用 ' . '  结构体指针访问成员变量使用 ‘ -> ’  

下标运算符:[]  数组    例如: int a[10]

自加自减运算符:++  --   谁在前就先执行谁 例如:++a    // ++ 在前表示:a=a+1 自身先加1;a 表示赋值     -- 同理

2.运算符优先级

口诀:

括号成员第一名( ()  []  .  -> );群体单目第二( ++ --  +(正)  -(负) );

乘除余三( * /  % ),加减四(+  - );

位移五(<<  >>),关系六(>  < >= <= );等于不等排第七(==  !=)

位与异或或"三分天下,八九十" ( &  ^  |  ); 逻辑与十一 ( && )、或十二 ( || );

条件高( ? :  )、赋值低 ( = );逗号最垃圾( , )

四、结构与控制

1.C语言程序结构

顺序  :程序自上而下顺序执行 

选择 :if()  if --else  if嵌套  switch() ,switch()里必须有刹车语句 break < return < exit  还需要有default ,表示其他情况如何。

循环 : for()  for嵌套  while()  do--while    死循环:for(;;)   while(1)

2.C语言控制语句

2.1 条件判断

if()  if-else      if嵌套  switch()   break(跳出循环)

2.2 循环语句

while()  do-while  for()  goto(无条件转跳)   continue(关键字,跳过一次循环进入下一次)

五、数组

1.一维数组

1.1 定义与引用

数据类型 数组名[常量]   //int a[10];

1.2 初始化和内存分配

部分初始化 全部初始化

连续内存空间

选择排序  简单选择排序  杨辉三角形 冒泡排序 Fibonacci数列

2.多维数组

2.1 定义及初始化

数据类型  数组名[常量][常量] 除了多一个下标其他与一维数组相同

2.2 使用与内存分配

连续存储内存空间  与一维数组相同

3.字符数组与字符串

3.1 定义与输入输出

char 数组名[常量]  printf("%s\n",a)  puts(a)  scanf("a") gets(a) 以 ' \0 ' 结尾,非常有用

3.2 字符串处理函数

strlen()  strcpy()  strcat()  strcmp()  strtok()

//strlen()
int mystrlen(char*p)
{
   int count=0;
   while(*p++ !='\0')
   {
      count++;
   }
   return count;
}
//strcpy()
char* mystrcpy(char*dsp,const char*src)
{
   char* q=src;
   while(*dsp++=*src++);
   return q;
}
//strcat()
char* mystrcat(char*p,char*q)
{
   char* m=p;
   while(*++p !='\0');
   while(*p++=*q++);
   return m;
}
//strcmp()
int mystrcmp(char *p,char*q)
{
   while(*p!='\0' ||*q!='\0')
   {
      if(*p>*q)
         return 1;
      else if(*p<*q)
         return -1;
      else
      {
         p++;q++; 
      }
   }
    return 0;
}
//strtok()  是将字符串拆成单个字符

六、指针

1. 指针基础

1.1 定义赋值与使用

类型说明符 * 变量名  占内存空间4字节    指针常量NULL     &:取地址符

2. 指针运算

2.1 关系与算术运算

指针与整型 :指针与整型的算数运算,表示指针移动多少个位置

指针与指针:必须是同类型且指向连续存储的对象才有意义,否则无意义,浪费时间。指针与指针的算数运算,表示二者的间隔数: (p[4] -p[1]) /sizeof(int) =12/4=3 即指向 p 指向 a[3] 。

值:                                 地址:

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

2.2 空指针   NULL

NULL是指针变量唯一的常量,指针是一把双刃剑,用的好就是非常好用的工具,反之则可能会造成严重后果,这便是野指针,可能指向一些系统重要文件,不小心更改就会可能导致程序、系统崩溃,在编程中应当去避免。

指针变量初始化时,暂时无法确定指针变量的指向可将之赋值为NULL 避免野指针。

3. 指针、数组、函数

3.1 指针与一维数组

在传递参数时,常用地址传递与值传递 地址,传递可改变实参变量的值而地址传递着不行

#include <stdio.h>

//int* p = &a;
void setA(int* p)
{
	*p = 200;
}

int main()
{
	int a = 10;
	setA(&a);//地址传递	
    printf("a is %d\n",a);
	return 0;
}
#include <stdio.h>
int a(setA) = a(main);
void setA(int a)
{
	a = 200;
}

int main()
{
	int a = 10;
	setA(a);// 值传递	
    printf("a is %d\n",a);
	return 0;
}

3.2 指针与多维数组

int a[3][5];  int (*p)[5] //

遍历二维数组 

3.3 指针与函数

int find (int *)  int (*p)(int*)  void*

4. 多级指针

4.1 定义与引用

int *q=NULL;  int **p=&q;

4.2 多级指针运算

七、函数

1.函数基础

1.1 定义声明

实现具体功能的代码段被封装   命名规则  声明

1.2 调用与传递

值传递 地址传递  全局变量传参   返回值

2.指针函数与函数指针

2.1 定义使用与声明

2.2 函数指针类型与数组

int (*p)(int)  int  p(int) 

3.递归与回调函数

3.1 递归定义与说明

3.2 形式与条件

3.3 回调定义与机制

3.4 递归回调使用实例

八、自定义数据类型

1.结构体

1.1 定义、声明及使用

struct 结构体名字{};

1.2 结构体数组与指针

2.位域

2.1 定义及说明

2.2 位域的使用

3.共用体与枚举

3.1 共用体

3.2 枚举定义与使用

九、C语言的高级用法

1.内存管理

1.1 动态内存管理与函数

数据类型指针p=malloc(sizeof(数据类型))  判断是否申请成功  手动申请手动释放

2.堆与栈

3.常见关键字总结

3.1 static、const

3.2 extern、宏定义、typedef

3.3 volatile、register、memory


总结

自我思考,总结C语言基础的数据语法、函数、定义以及使用方法,例如:数制、运算符、字符与字符串、数组、常用函数、指针、结构体,将梳理C语言的整体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值