vlambda博客
学习文章列表

C语言是最广泛使用的系统程序设计语言


C语言程序设计-学习笔记

C语言是最广泛使用的系统程序设计语言

一、环境配置;
1、开发工具;(windows: Visual Studio\CodeBlocks\Source Insight)
http://www.360doc.com/content/19/0907/23/277688_859746678.shtml
https://www.runoob.com
2、GCC编译器
https://osdn.net/projects/mingw/downloads/68260/mingw-get-setup.exe/
http://www.360doc.com/content/18/0728/23/20579385_774061037.shtml

二、程序结构;
1、最小的C程序结构;
`


1. #include <stdio.h>
2.
3. int main()
4. {
5. int a = 5;
6. /* 我的第一个 C 程序 */
7. printf("Hello, World! \n");
8.
9. return 0;
10. }
11.

`
主要包括:

  • 预处理器指令

  • 函数

  • 变量

  • 语句&&表达式

  • 注释

解释:
1、第一行 #include<stdio.h> 是预处理器指令,告知C编译器在实际编译前要包含stdio.h 文件;
2、第三行 int main() 是主函数,程序从这里开始执行;
3、第六行 /。。。/ 程序注释部分,运行过程中,将被编译器忽略;
4、第七行 printf() 是C语言中函数,打印消息;
5、第九行 return 0;表示终止 main()函数,并返回值为0;

编译器执行命令:
1、文本编辑器生成helloworld.c文件;
2、键入命令行:gcc helloworld.c,生成'a.out'执行文件;
3、执行a.out文件,生成“hello world C "消息;

三、基本语法

1、C的令牌(Tokens)
即关键字包括5种,组成了各种C程序;
分号:

printf("Hello, World! \n");
return 0;

解释:在C程序中,分号表示语句的结束符号,每个语句必须以分号结束,表明一个逻辑实体的结束;

注释:
单行注释和多行注释 类似Java(Java 多了一个文本注释)

/* 单行注释 */
/*
多行注释
多行注释
多行注释
*/

标识符:
用途:标识变量、函数或其他自定义的名称;
组成结构:
一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。

C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。

_whs
w_hs

关键字:
备注:不能作为常量名称、变量名称及其他标识符名称;

C99 新增关键字及C11新增关键字 省略

四、数据类型;

数据类型之的是声明不同类型的变量或函数的一个广泛的系统;
变量的类型决定了变量存储占用的空间;
C中类型可分为以下几种:

C语言是最广泛使用的系统程序设计语言

备注:数组类型和结构类型统称为聚合类型;
函数类型是指函数的返回类型;

整数类型:
C语言是最广泛使用的系统程序设计语言
各种类型的存储大小与系统位数有关;
参考:

https://www.runoob.com/cprogramming/c-data-types.html

#include <stdio.h>
#include <limits.h>
int main()
{
printf("int 存储大小 : %lu \n", sizeof(int));
return 0;
}

浮点类型:
C语言是最广泛使用的系统程序设计语言


#include <stdio.h>
#include <float.h>
int main() {
printf("float 存储最大字节数 : %lu \n", sizeof(float));
printf("float 最小值: %E\n", FLT_MIN );
printf("float 最大值: %E\n", FLT_MAX );
printf("精度值: %d\n", FLT_DIG );
return 0; }

void类型:
没有可用的值;
C语言是最广泛使用的系统程序设计语言

五、变量;

变量是程序可操作的存储区的名称;
1、变量定义;
目的是告知编译器,在何处创建变量的存储;

int    i, j, k;
char c, ch;
float f, salary;
double d;

2、变量声明;
有两种情况
`
1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。

2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。例如:extern int a 其中变量 a 可以在别的文件中定义的。除非有extern关键字,否则都是变量的定义。`

extern int i; //声明,不是定义
int i; //声明,也是定义

#include <stdio.h>
// 函数外定义变量 x 和 y
int x;
int y;
int addtwonum() {
// 函数内声明变量 x 和 y 为外部变量
extern int x;
extern int y;
// 给外部变量(全局变量)x 和 y 赋值
x = 1;
y = 2;
return x+y;
}
int main() {
int result;
// 调用函数
addtwonum result = addtwonum();
printf("result 为: %d",result);
return 0;
}

一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字的声明即可

六、常量;

常量是固定值,在程序执行过程中不会改变;
可以是 基本数据类型

整数常量(十进制、八进制或者十六进制的常量)
通过前缀基数区分;

浮点常量(整数部分、小数点、小数部分和指数部分组成)

字符常量(是括在单引号中的)

C语言是最广泛使用的系统程序设计语言


#include <stdio.h>
int main() {
printf("Hello\tWorld\n\n");
return 0;
}

字符串常量(普通字符、转义序列、通用字符)

定义常量有两种简单方式:
1、使用#define预处理器;
2、使用const关键字;

七、存储类;

定义C程序中变量、函数的范围和生命周期;放置在它们修饰的类型之前;

  • auto

  • register

  • static

  • extern

auto 只能修饰局部变量;


{
int mount;
auto int month;
}

register 定义存储在寄存器中而不是RAM中的局部变量;


{
register int miles;
}

static存储类
编译器在程序的生命周期内保持局部变量的存在;

#include <stdio.h>
/* 函数声明 */
void func1(void);
static int count=10;
/* 全局变量 - static 是默认的 */
int main() {
while (count--) {
func1();
}
return 0;
}
void func1(void) {
/* 'thingy' 是 'func1' 的局部变量 - 只初始化一次 * 每次调用函数 'func1' 'thingy' 值不会被重置。*/
static int thingy=5;
thingy++;
printf(" thingy 为 %d , count 为 %d\n", thingy, count);
}

extern存储类提供一个全局变量的引用,全局变量对所有的程序都是可见的;

八、运算符;

1、算术运算符;
C语言是最广泛使用的系统程序设计语言
2、关系运算符;
C语言是最广泛使用的系统程序设计语言
3、逻辑运算符;
C语言是最广泛使用的系统程序设计语言
4、位运算符;
C语言是最广泛使用的系统程序设计语言
5、赋值运算符;
C语言是最广泛使用的系统程序设计语言
6、杂项运算符及三元运算符;
C语言是最广泛使用的系统程序设计语言

运算符的优先级:
C语言是最广泛使用的系统程序设计语言

###### 九、判断;
1、判断语句;
C语言是最广泛使用的系统程序设计语言
2、?:运算符;
C语言是最广泛使用的系统程序设计语言

###### 十、循环;
1、循环类型;
C语言是最广泛使用的系统程序设计语言
2、循环控制语句;
C语言是最广泛使用的系统程序设计语言
3、无限循环;


#include <stdio.h>
int main () {
for( ; ; )
{
printf("该循环会永远执行下去!\n");
}
return 0;
}
十一、函数

每个C程序至少有一个函数;main函数
1、定义函数;


return_type function_name( parameter list )
{
body of the function
}

组成介绍:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。

  • 函数名称:(function_name)这是函数的实际名称。函数名和参数列表一起构成了函数签名。

  • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。

  • 函数主体:函数主体包含一组定义函数执行任务的语句。

2、函数的声明;
3、函数的调用;
4、函数参数;
C语言是最广泛使用的系统程序设计语言

十二、作用域规则;

1、全局变量;
2、局部变量;
3、行参;

在函数或块内部的局部变量在
所有函数外部的全局变量
在形式参数的函数参数定义中

#include <stdio.h>
/* 全局变量声明 */
int a = 20;
int main () {
/* 在主函数中的局部变量声明 */
int a = 10;
int b = 20;
int c = 0; i
nt sum(int, int);
printf ("value of a in main() = %d\n", a);
c = sum( a, b); printf ("value of c in main() = %d\n", c);
return 0;
}
/* 添加两个整数的函数 */
int sum(int a, int b)
{
printf ("value of a in sum() = %d\n", a);
printf ("value of b in sum() = %d\n", b);
return a + b;
}

当变量被定义时候,局部变量不会被系统初始化,需要自行初始化;全局变量会被系统初始化;

十三、数组;

定义:存储一个固定大小的相同类型元素的顺序集合;
数组的使用,声明数组、数组赋值、访问数组;

十四、enum枚举;

好处:让数据更加简洁易读;

十五、指针;
int *ip; /* 一个整型的指针 */
double *dp; /* 一个 double 型的指针 */
float *fp; /* 一个浮点型的指针 */
char *ch; /* 一个字符型的指针 */

使用指针:


#include <stdio.h>
int main () {
int var = 20; /* 实际变量的声明 */
int *ip; /* 指针变量的声明 */
ip = &var; /* 在指针变量中存储 var 的地址 */
printf("Address of var variable: %p\n", &var ); /* 在指针变量中存储的地址 */
printf("Address stored in ip variable: %p\n", ip ); /* 使用指针访问值 */
printf("Value of *ip variable: %d\n", *ip );
return 0;
}

C中的NULL指针:


#include <stdio.h>
int main () {
int *ptr = NULL;
printf("ptr 的地址是 %p\n", ptr );
return 0;
}

十六、函数指针与回调函数;

函数指针:
定义:函数指针是指向函数的指针变量;
特点:函数指针可以像一般函数一样,用于调用函数,传递参数;


typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型

#include <stdio.h>
int max(int x, int y) {
return x > y ? x : y;
}
int main(void) {
/* p 是函数指针 */
int (* p)(int, int) = & max; // &可以省略
int a, b, c, d;
printf("请输入三个数字:");
scanf("%d %d %d", & a, & b, & c);
/* 与直接调用函数等价,d =max(max(a, b), c) */
d = p(p(a, b), c);
printf("最大的数字是: %d\n", d);
return 0;
}

回调函数:

定义:通过函数指针调用的函数;

未完待续...