知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

c十十语言入门

发表时间:2022-03-25来源:网络

一、C语言基础知识入门

C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课!

 

博主已将这些基础知识汇总成了一个PDF版的C语言基础知识大全关注博主的微 信 公 众号  “C和C加加”  回复“PDF”即可获取!需要C/C++入门、进阶教程的回复“ZXC”即可获取!

二、C语言的具体结构

简单来说,一个C程序就是由若干头文件和函数组成。

#include 就是一条预处理命令, 它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。

函数就是实现代码逻辑的一个小的单元。

三、主函数

一个C程序有且只有一个主函数,即main函数。

C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。而main前面的int就是主函数的类型.printf()是格式输出函数,这里就记住它的功能就是在屏幕上输出指定的信息return是函数的返回值,根据函数类型的不同,返回的值也是不同的。\n是转义字符中的换行符。(注意:C程序一定是从主函数开始执行的)

四、规范

一个说明或一个语句占一行,例如:包含头文件、一个可执行语句结束都需要换行。函数体内的语句要有明显缩进通常以按一下Tab键为一个缩进。括号要成对写,如果需要删除的话也要成对删除。当一句可执行语句结束的时候末尾需要有分号。代码中所有符号均为英文半角符号

五、程序解释——注释

注释是写给程序员看的,不是写给电脑看的。

C语言注释方法有两种:

多行注释: /* 注释内容 */

单行注释: //注释一行

六、C的标识符

C语言规定,标识符可以是字母(A~Z,a~z)、数字(0~9)、下划线_组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:

标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。标识符是严格区分大小写的。例如Imooc和imooc 是两个不同的标识符。标识符最好选择有意义的英文单词组成做到"见名知意",不要使用中文。标识符不能是C语言的关键字。想了解更多C语言关键字的知识。
 

七、变量及赋值

变量就是可以变化的量,而每个变量都会有一个名字(标识符)。变量占据内存中一定的存储单元。使用变量之前必须先定义变量,要区分变量名和变量值是两个不同的概念。

变量定义的一般形式为:数据类型 变量名;

多个类型相同的变量:数据类型 变量名, 变量名, 变量名…;

注意:在定义中不允许连续赋值,如int a=b=c=5;是不合法的。

变量的赋值分为两种方式:

先声明再赋值声明的同时赋值

八、基本数据类型

C语言中,数据类型可分为:

基本数据类型构造数据类型指针类型空类型四大类

最常用的整型, 实型与字符型(char,int,float,double):

整型数据是指不带小数的数字(int,short int,long int, unsigned int, unsigned short int,unsigned long int):

注:

int short int long int是根据编译环境的不同,所取范围不同。而其中short int和long int至少是表中所写范围, 但是int在表中是以16位编译环境写的取值范围。另外 c语言int的取值范围在于他占用的字节数 ,不同的编译器,规定是不一样。ANSI标准定义int是占2个字节,TC是按ANSI标准的,它的int是占2个字节的。但是在VC里,一个int是占4个字节的。

浮点数据是指带小数的数字。

生活中有很多信息适合使用浮点型数据来表示,比如:人的体重(单位:公斤)、商品价格、圆周率等等。

因为精度的不同又分为3种(float,double,long double):

九、格式化输出语句

格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。

其格式为:printf("输出格式符",输出项);

当输出语句中包含普通字符时,可以采用以下格式:

printf("普通字符输出格式符", 输出项);

注意:格式符个数要与变量、常量或者表达式的个数一一对应

博主已将这些基础知识汇总成了一个PDF版的C语言基础知识大全关注博主的微 信 公 众号  “C和C加加”  回复“PDF”即可获取!

十、常量

在程序执行过程中,值不发生改变的量称为常量。

mtianyan: C语言的常量可以分为直接常量和符号常量。

直接常量也称为字面量,是可以直接拿来使用,无需说明的量,比如:

整型常量:13、0、-13;实型常量:13.33、-24.4;字符常量:‘a’、‘M’字符串常量:”I love imooc!”

在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为

#define 标识符 常量值 #include #define POCKETMONEY 10 //定义常量及常量值 int main() { // POCKETMONEY = 12; //小明私自增加零花钱对吗? printf("小明今天又得到%d元零花钱\n", POCKETMONEY); return 0; }

符号常量不可以被改变。

十一、自动类型转换

数据类型存在自动转换的情况.
自动转换发生在不同数据类型运算时,在编译的时候自动完成

char类型数据转换为int类型数据遵循ASCII码中的对应值.

注:

字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换

char可以转换为int,int可以转换为double,char可以转换为double。但是不可以反向。

十二、强制类型转换

强制类型转换是通过定义类型转换运算来实现的。其一般形式为:

(数据类型) (表达式)

其作用是把表达式的运算结果强制转换成类型说明符所表示的类型

在使用强制转换时应注意以下问题:

数据类型和表达式都必须加括号, 如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。强制转换后的运算结果不遵循四舍五入原则。

十三、运算符号

C语言中运算符:

1.算术运算符

c语言基本运算符:

2.自增与自减运算符

自增运算符为++,其功能是使变量的值自增1自减运算符为--,其功能是使变量值自减1。

它们经常使用在循环中。自增自减运算符有以下几种形式:

3.赋值运算符

C语言中赋值运算符分为简单赋值运算符复合赋值运算符

简单赋值运算符=号了,下面讲一下复合赋值运算符:

复合赋值运算符就是在简单赋值符=之前加上其它运算符构成.

注意:复合运算符中运算符和等号之间是不存在空格的。

4.关系运算符

C语言中的关系运算符:

关系表达式的值是真和假,在C程序用整数1和0表示。

注意:>=, {1, 2,3}, {4, 5,6},{7, 8, 9}}; array[1][1] = 5;

或许你以为在内存中 array 数组会像一个二维矩阵:

1 2 3 4 5 6 7 8 9

可实际上它是这样的:

1 2 3 4 5 6 7 8 9

和一维数组没有什么区别,都是一维线性排列。

当我们像 array[1][1]这样去访问的时候,编译器会怎么去计算我们真正所访问元素的地址呢?

为了更加通用化,假设数组定义是这样的:

int array[n][m]

访问: array[a][b]

那么被访问元素地址的计算方式就是: array + (m * a + b)

这个就是二维数组在内存中的本质,其实和一维数组是一样的,只是语法糖包装成一个二维的样子。

6、 void 指针

想必大家一定看到过 void 的这些用法:

void func(); int func1(void);

在这些情况下,void 表达的意思就是没有返回值或者参数为空。

但是对于 void 型指针却表示通用指针,可以用来存放任何数据类型的引用。

下面的例子就 是一个 void 指针:

void *ptr;

void 指针最大的用处就是在 C 语言中实现泛型编程,因为任何指针都可以被赋给 void 指针,void 指针也可以被转换回原来的指针类型, 并且这个过程指针实际所指向的地址并不会发生变化。

比如:

int num; int *pi = # printf("address of pi: %p\n", pi); void* pv = pi; pi = (int*) pv; printf("address of pi: %p\n", pi);

这两次输出的值都会是一样:

平常可能很少会这样去转换,但是当你用 C 写大型软件或者写一些通用库的时候,一定离不开 void 指针,这是 C 泛型的基石,比如 std 库里的 sort 函数申明是这样的:

void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

所有关于具体元素类型的地方全部用 void 代替。

void 还可以用来实现 C 语言中的多态,这是一个挺好玩的东西。

不过也有需要注意的,不能对 void 指针解引用

比如:

int num; void *pv = (void*)# *pv = 4; // 错误

为什么?

因为解引用的本质就是编译器根据指针所指的类型,然后从指针所指向的内存连续取 N 个字节,然后将这 N 个字节按照指针的类型去解释。

比如 int *型指针,那么这里 N 就是 4,然后按照 int 的编码方式去解释数字。

但是 void,编译器是不知道它到底指向的是 int、double、或者是一个结构体,所以编译器没法对 void 型指针解引用。

关于指针想写的内容还有很多,这其实也只算是开了个头,限于篇幅,以后有机会补齐以下内容:

二维数组和二维指针

数组指针和指针数组

指针运算

函数指针

动态内存分配: malloc 和 free

堆、栈

函数参数传递方式

内存泄露

数组退化成指针

const 修饰指针

...

到此基本上涵盖了 C 语言的基本知识。

二十二、博主已将这些基础知识汇总成了一个PDF版

博主已将这些基础知识汇总成了一个PDF版的C语言基础知识大全关注博主的微 信 公 众号  “C和C加加”  回复“PDF”即可获取!

更多C/C++入门、进阶教程也可以关注博主微 信 公 众 号“C和C加加”

回复“ZXC”即可获取!!!

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜