栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言基础知识手册(自用)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言基础知识手册(自用)

文章目录
  • 前言
  • 一、C代码的基础框架
  • 二、变量与常量
    • 1.数值类型
      • 1.1-基本类型
        • 1.1.1-整型int
        • 1.1.2-浮点型float
        • 1.1.3-字符型char
        • 1.1.4-枚举型enum
        • 1.1.5-指针型
      • 1.2-构造类型
        • 1.2.1-数组
        • 1.2.2-结构体
        • 1.2.3-共用体
    • 2.常量
    • 3.变量
      • 3.1-const
      • 3.2-define
      • 3.3-typedef
      • 3.4-static
    • 4.作用域
      • 4.1-局部变量
      • 4.2-全局变量
    • 5.存储模型
      • 5.1-自动
      • 5.2-寄存器
      • 5.3-静态、空连接
      • 5.4-静态、外部链接
      • 5.5-静态、内部链接
    • 6.预处理
      • 6.1-预定义
      • 6.2-宏定义
      • 6.3-条件编译
    • 7.进制转换
    • 8.获取随机值
  • 三、运算符
    • 1.算术运算符
    • 2.关系运算符
    • 3.逻辑运算符
    • 4.sizeof()
    • 5.优先级
  • 总结


前言

  本文主要是对作者学到的知识进行的一个总结,方便以后遗忘时可以回来看看。如果帮助到大家,实属荣幸,如果有不足之处大家也可以在评论中提出来,互相学习互相增长,随时更新,谢谢大家。


提示:以下是本篇文章正文内容,下面案例可供参考

一、C代码的基础框架

  .c 结尾的是C语言的源程序。

#include 
int main()
{
	printf("hello world!!n"); 
	return 0; 
} 

  .h 译为head,表示头文件。stdio.h表示standard input output是标准输入输出头文件。对于头文件与函数的关系,我们可以联想成工具箱与工具,方便记忆。
  “< >”是Linux系统自带的头文件,而自己的写的头文件用 " “,比如"my.h” 。
  “;”代表一句话的结束,其功能是在屏幕上打印输出字符串。
  int是整型,一种C语言的数据类型,后面会详细说明。
  main是函数函数体开始,函数的返回值类型是int,() 里面放的main函数的参数列表。需要注意的是一个程序只能有一个入口函数main。
  “printf”是一个函数,格式化输出函数。
  “n”是一种换行符。
  " "表达的是字符串, " "之间写什么,屏幕上就原封不动打印输出什么。
  return是返回值的意思,返回值是0,是main函数体的结束。

二、变量与常量 1.数值类型 1.1-基本类型 1.1.1-整型int

  (unsigned-无符号) (short int)/short:占用字节2,比特数16,取值范围:

-32768-32767,带unsigned:0-32767*2=65535。

  (unsigned-无符号)int:占用字节4,比特数32,取值范围:

-2147483648-2147483647,带unsigned:0-2147483647*2=4294967295。

  (unsigned-无符号)long int(long):占用字节8,比特数32,取值范围:

-2147483648-2147483628,带unsigned:0-2147483628*2=4294967295

以上类型,对应输出符号都为%d。

1.1.2-浮点型float

  float:所占字节4,比特数32,有效数字6~7,对应输出符号为%f。
  double:所占字节8,比特数64,有效数字15~16,对应输出符号为%lf。
  long double:所占字节16,比特数64,有效数字18~19,对应输出符号%lf。
  .2f:结果保留两位小数。

1.1.3-字符型char

  (unsigned-无符号)char:所占字节1,比特数8,取值范围-128127,无符号0255,对应输出符号%c。
  string:字符串类型,可理解成字符型数组,内部容量根据实际需求确定,对于输出符号%s。
  字符串常量与静态变量类似,都是程序结束时才被释放。
  同时,字符有其对应的ASCII码,
  ‘0’ -‘9’~48-57
  ‘A’-‘Z’~65-90
  ‘a’-‘z’~97-122

1.1.4-枚举型enum

  enum:枚举变量只能被赋予枚举值。枚举值会被默认标号,从0开始,依次递增。

enum 枚举名
{
  枚举值1,
  枚举值2,
  枚举值3,
  …………
}枚举变量表列(a,b,c……);
1.1.5-指针型

  *+any(例:int *a),指针类型包含很多,常见的有int型、char型、struct型等。指针常量只有唯一的一个空地址NULL。

1.2-构造类型 1.2.1-数组

一维数组:
  最简单的数组,语法为“数组类型 数组名[数组内容个数]”由一个集合构成,标号从0开始。
  例:int a[3],则调用数组内部成员分别通过a[0]、a[1]、a[2]调用。
二维数组:
  多维数组中,最简单的数组,内部结构可理解成矩阵,语法为“数组类型 数组名[行数][列数]”,调用内部成员方式与一维数组类似,只不过多了描述行和列的位置。
  例:int a[2][2],内部结构为两行两列的二维数组,调用第一行第二列的语法为a[0][1]。

1.2.2-结构体

  用户自定义数据类型的一种,语法结构为:

struct 结构体名
{
  数据类型  成员名1;
  数据类型  成员名2;
  …………
}结构体变量表列;(可写可不写,与普通变量一起定义也可以)
例:
struct Stu
{
  int age;
  char sex;
  char* name;
}e1,e2;
或
struct Stu
{
  int age;
  char sex;
  char* name;
};
struct Stu s1;
1.2.3-共用体

  用户自定义类型的另一种,与语法结构为:

union  Stu
{
  int age;
  char sex;
  char *name;
};

  创建变量的方法与结构体相同,唯一不同的是,共用体内存由其最大的成员决定。

2.常量

  多指存在于代码中的内容不固定的一个类型的数值名。
  例:int a;——定义了一个整型变量a。
    char b=‘c’;——定义了一个字符型’’变量b,其值为‘c’。

3.变量 3.1-const

   使用const定义的常量,之后不能被改变,做参数也是。
  语法规则:int const a;
     或:const int a;
对于指针
   int * const a;与const int *a/int const *a;是不同的,前者是指针常量,不能改变a的值;后者是常量指针,可改变其指向,但不能改变其指向的变量的值。

3.2-define

  一种进行符号替换的关键字,通常与头文件放在一起。
语法结构:
#define A 10 ——让代码中,所有的A的值都为10。

3.3-typedef

  用于给一种数据类型定义新名字的关键字。
  例:typedef signed char s8——给有符号字符型取名为s8
    之后便可使用新名字命名:s8 a;——定义了一个有符号字符型变量a。
  当对结构体使用typedef时,需要注意。

typedef struct Stu
{
    成员表列
    ……
}STU,*PSTU;

  此时,在主函数中可以通过STU定义普通结构体变量,使用*PSTU定义指针结构体变量。

3.4-static

  static关键字声明的静态变量存储在数据段(也称全局区)。未初始化时其值为0存储在数据段的未初始化区,初始化时存储在数据段的初始化区。
修饰局部变量,称静态变量,作用域不变,生命周期被延长,直至整个程序结束,如果被调用多次执行的是同一个变量,值初始化一次,未初始化默认值为0。
  修饰全局变量,变量只能在本文件调用,不能被其他文件调用。
  修饰函数,只能在本文件中使用,不能被其他文件调用。
  若想在其他文件中调用,就需要使用extern进行外部声明。
  静态变量在声明后,除非在外部文件中使用extern声明后可以调用,其余情况下只能在本文件中使用,并且在程序结束时才被销毁。
  例:

static int a = 10;
或
static void add()
{
  printf(“1+1=2”);
}

  使用static声明后也可以看作将该块内容保护起来,不能被其他文件调用或修改。

4.作用域 4.1-局部变量

  在主函数内部定义的变量都属于局部变量,仅在主函数内部有效。每个函数的参数也属于局部变量,作用域仅限于当前函数内。

4.2-全局变量

  (extern可加可不加。)在任何函数外部定义的变量都是全局变量,在整个代码中都有效。

5.存储模型 5.1-自动

  一般没有特别声明的变量,都属于自动型变量,auto可写可不写。同时具有动态存储期、代码块的作用域、空连接。
  例:int a; auto int a; 二者是一样的。

5.2-寄存器

  使用修饰符register声明的变量属于寄存器存储类。具有自动存储器、代码块作用域和空连接。
  需要注意的是,不能对该类性的变量使用“&”,因为他存储在cpu的寄存器中。

5.3-静态、空连接

  使用static修饰的变量属于静态空连接存储类,使用静态存储方式。所有全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。
  空连接指该变量的作用域是定义它的代码块。
  使用static定义的全局变量属于静态全局变量。
  使用static定义的局部变量属于静态局部变量,生存期与为整个程序执行期间,作用域与局部变量相同,只能在定义该变量的函数内使用该变量。

5.4-静态、外部链接

  未使用static描述的的全局变量属于静态、外部链接存储类,具有静态存储时期、文件作用域和外部链接。在使用外部变量的函数中使用extern关键字来再次声明,若在其他文件中定义的,则必须使用extern。
  外部链接:外部链接的变量可以在多个文件中使用。

5.5-静态、内部链接

  使用static描述的全局变量属于静态、内部链接存储类,仅能被与他在同一文件的函数使用。
  内部链接:内部链接的变量只能在一个文件中使用。

6.预处理 6.1-预定义

  一些之前定义好的一些符号,用于表示各种信息。
例:
  FILE 表示正在与编译的源文件名
  LINE 表示文件当前行的行号
  FUNCTION 表示当前所在的函数名
  DATE 表示预编译文件的日期
  TIME 表示预编译文件的时间
  STDC 如果编译器遵循ANSIC,则值为1

6.2-宏定义

  define的具体应用。
  无参数宏定义:
  例:#define M (y + 3),代码中的“(y+3)”都可由M代替。
  有参数宏定义:
  例:#define M(y) y+3,代码中的“y+3”都可由M(x)代替,使用时必须传参。
  需要注意的是,宏定义无脑替换,定义的什么,表达式就是什么,没有需要自己加括号的情况。

#define X 2
#define Y X+1

printf("result is %dn",Y*Y);
//结果为2+1*2+1 = 5
6.3-条件编译

  语法结构为:
#if 条件
………
#endif
  例:

#ifdef DEBUG
	int i;
	for ( i = 0 ; i < 5 ; i++ )
	{
		printf("%dn",a[i]);
	}
#endif

7.进制转换

  简单方法:
  八进制-%o、十进制-%d、十六进制-%x/%X,若在八进制与十六进制前加“#”,则在每个数前显示“0”。
  复杂方法:
  十进制转二进制——先跟2取余,再除2,直至除的结果为0
  十进制转八进制——先跟8取余,再除8,直至除的结果为0
  十进制转十六进制——先跟16取余,再除16,直至除的结果为0
  二进制转八进制——三个一组,每组按421算值,  例:010001->010 001->021
  二进制转十进制——从最右侧开始以0开始依次递增1到最左端结束,然后2取标号的幂相加,例:10001100->22+23+2^7
  二进制转十六进制——四个一组,每组按8421算值,
  例:10100010->1010 0010->0xA2

8.获取随机值

  语法结构
  头文件:#include ——只为能使用time(NULL);
  语句:srand(time(NULL));
   int z=rand()%n;——对n取余表示随机获取n之前的值。
  原理
  time()是获取1970年至今的差数,srand()是获取一组随机数,srand(1)是一组,srand(2)又是一组。
  而rand()从刚才获取的一组随机数。

三、运算符 1.算术运算符

  “+”加法运算符 int a = 3 + 5; //a = 8;
  “-”减法运算符 int b = 3 - 5; //b = -2;
  “*”乘法运算符 int c = 3 * 5; //c = 15;
  “/”除法运算符 int d = 5 / 3; //d = 1;
  “%”模运算符(求余运算) int e = 5 % 3; //e = 2;
  “,”逗号运算符
  例:s=2; d=3; a=12+(s+2,d+4);先算括号内的值:s+2=4,d+4=7;括号内应为(4,7),括号内取值只取最后一个,如果没有括号则取第一个;a=12+7=19。

2.关系运算符

  “<”小于
  “<=”小于等于
  “>”大于
  “>=”大于等于 //(1)(2)(3)(4)优先级相同(高)
  “==”等于
  “!=”不等于 //(5)(6)优先级相同(低)

3.逻辑运算符

  “&&”逻辑与 // (a>b)&&(x>y)
  “||”逻辑或 // (a>b)||(x>y)
  “! ”逻辑非 // ! (a > b) ###举例:if(!a)
  对于“&&”,当第一个条件表达式成立时,需要看第二个,第二个也正确,结果为1否则为0;当第一个不成立时,不需要再看第二个,结果为0。
  对于“||”,当第一个条件不成立时,需要看第二个,第二个也不成立,结果为0否则为1;当第一个条件成立时,不需要看第二个,结果为1。

4.sizeof()

  作用:求变量或数据类型所占内存空间的大小,以字节为单位。
  若为字符串测量,包含了‘’。

5.优先级

  算数运算符>移位运算符>条件运算符>按位运算符>赋值
  括号成员第一:()、[]、->、.、
  全体单目(操作数只有一个)第二:!、~、++、–、-、(类型转换)、、&、sizeof()
  乘除余三:
、/、%
  加减四:+、-
  移位五:>>、<<
  关系六:<、<=、>、>=
  等于不等排第七:=、!=
  位与、异或、和位或“三分天下”八九十:第八“&”、第九“^”、第十“|”
  逻辑或跟与十二和十一:第十一“&&”、第十二“||”
  条件高于赋值:十三“ ? : ”、十四“=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=”
  逗号运算级最低。:“,”


总结

这次就先更到这里,后续还会更新。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号