【C语言初级知识】


本章重点:

  • 什么是C语言
  • 第一个C语言程序
  • 数据类型
  • 变量、常量
  • 字符串+转义字符+注释
  • 选择语句
  • 循环语句
  • 函数
  • 数组
  • 操作符
  • 常见关键字
  • define 定义常量和宏
  • 指针
  • 结构体

1.什么是C语言?

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

C语言的主要特点:

  1. 简洁的语言
  2. 具有结构化的控制语句
  3. 丰富的数据类型
  4. 丰富的运算符
  5. 可对物理地址进行直接操作
  6. 代码具有较好的可移植性
  7. 可生成高质量、目标代码执行效率高的程序

2.第一个C语言程序

#include<stdio.h>
int main ()
{
  printf("hello world!\n");
  return 0;
}
//main是程序的入口
//一个工程中main函数有且仅有一个

3.数据类型

#include<stdio.h>
int main() 
{
	printf("%d\n", sizeof(char));//字符型
	printf("%d\n", sizeof(short));//短整型
	printf("%d\n", sizeof(int));//整形
	printf("%d\n", sizeof(long));//长整型
	printf("%d\n", sizeof(long long));//更长的整型
	printf("%d\n", sizeof(float));//单精度浮点数
	printf("%d\n", sizeof(double));//双精度浮点数
	printf("%d\n", sizeof(long double));
	return 0;
}

在这里插入图片描述

4.变量、常量

**变量:**值可变 (比如:年龄、体重、薪资)
**常量:**值不可变 (比如:圆周率、性别、身份证号码)

4.1定义变量的方法

int age = 20;
char ch = 'w';
float weight = 50.5f;

4.2变量的分类

- 局部变量
- 全局变量

int global = 2019;//全局变量
int main()
{
	int local = 2020;//局部变量
	int global = 2020;//局部变量和全局变量都定义时,局部变量优先
	printf("%d\n", global);
	return 0;
}

在这里插入图片描述

总结:
局部变量和全局变量同名时,局部变量优先使用

4.3变量的作用域和生命周期

作用域
作用域(scope)是程序设计概念,一般来说,一段代码中所用到的名字并不是总是有效/可用的,而限定限定这个名字的可用性的代码范围就是作用域。

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程,可跨文件调用。

生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期:整个程序的生命周期。
int main()
{
	int j = 0;
	for (int i = 0; i < 100; i++)
}

像上述代码片段中,j 的作用域是main函数,生命周期也是main函数
i 的作用域是for循环,生命周期也是for循环,for循环结束后,i 就被销毁

4.4

常量
C语言中的常量分为以下几种:

  • 字面常量
  • const修饰的常量
  • #define修饰的常量
  • 枚举常量
enum sex
{
	male = 0,
	female = 0,
};//枚举常量
#define MAX 100;//宏定义常量
int main()
{
	3.14159;//字面常量
	const float pai = 3.14;
	//const修饰的常量,不可被直接修改
}

5.字符串+转义字符+注释

5.1字符串

注:
字符串的结束标识是\0的转义字符,\0是结束标志,不算作字符串长度
C语言中用字符数组来存储字符串

int main()
{
	char arr1[] = "bit";
	char arr2[] = { 'b','i','t' };
	char arr3[] = { 'b','i','t' ,'\0' };
	printf("%s\n %s\n %s\n ", arr1, arr2, arr3);
}

在这里插入图片描述

用单个‘字符’表示的时候必须加上\0,否则会像第二种出现乱码

5.2转义字符

转义字符释义
?在连续书写多个问号时使用,防止被解析成3字母词
用于表示字符常量‘’
"用于表示字符串内部的双引号
\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符
\b退格符
\f进纸符
\ n换行
\ r回车
\ t水平制表符
\ v垂直制表符
\ dddddd表示1·3个八进制的数字
\ xdddd表示2个十六进制的数字

笔试题:
试猜想会打印出什么?

#include<string.h>
int main()
{
	printf("%d\n", strlen("abcdef"));
	printf("%d\n", strlen("c:\test\628\test.c"));
}

在这里插入图片描述
第一行有6个字符,所以打印了6
第二行\t、\62都是一个字符,总共是14个,所以打印14

5.3注释

/* …*/可注释多行代码
缺陷:不能嵌套注释
//注释一行代码,或在某行代码后添加注释

6.选择语句

加入比特
好好学习
不学习
好offer
卖红薯
  1. if语句
  2. switch语句(多分支选择)
int main()
{
	int cpding = 0;
	printf("你会敲代码吗:1或0\n");
	scanf("%d", &cpding);
	if (cpding == 1)
		printf("坚持,你会有好offer");
	else
		printf("放弃,回家卖红薯");
}

7.循环语句

Created with Raphaël 2.3.0 买彩票 老实学习 买中? 迎娶白富美 yes no
  • while
  • for
  • do while
int main()
{
	printf("加入比特\n");
	int line = 0;
	while (line <= 20000)
	{
		line++;
		printf("敲代码\n");
	}
	if (line > 20000)
		printf("good offer");
}

8.函数

#include<stdio.h>
int add(int x, int y) 
{
	return x + y;
}
int main() 
{
	int temp1 = 125;
	int temp2 = 80;
	int sum = add(temp1, temp2);
	return sum;
}

形如上述的add就是我们的自定义函数,可用来使函数模块化,提高代码的可读性,同时也便于我们修改代码
特点:简化代码,代码复用

9.数组

数组的定义:一组同类型的元素的集合

9.1数组的定义

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//定义一个整形数组,最多存放十个元素

重点
【】里只能是数字,不能是自己定义的变量或常量

9.2数组的下标

int a[1]1
下标0

数组下标永远从0开始 ,最大值为n-1;
一般数组的输入与输出用循环语句来操作

int main()
{
	int a[10];
	for (int i = 0; i < 10; i++)
		scanf("%d", &a[i]);
	for (int i = 0; i < 10; i++)
		printf("%d\t", a[i]);
}

10.操作符

算术操作符

+加法运算符
-减法运算符
*乘法运算符
/除法运算符
%取余运算符

移位操作符

<<左移一位操作符
>>右移一位操作符

位操作符

&   ^  |

赋值操作符

=   +=  -=  *=  /=  &=  ^=  |=  >>=   <<=

单目操作符

逻辑非
-负值
+正值
&取地址
sizeof计算字节数
~对一个数的二进制按位取反
- -前置、后置–
++前置、后置++
*间接访问操作符(解引用操作符)
(类型)强制类型转换

逻辑操作符

&&逻辑与
||逻辑非

关系操作符

>   >=   <  <=    !=  ==

条件操作符

exp1?exp2:exp3

逗号表达式

exp1,exp2,exp3

运算结果只取最后一个

下标引用、函数调用和结构成员

[]  ()  .   ->

11.常见关键字

auto声明一个变量为自动变量,仅限局部变量
break终止循环或switch语句
case分支
const
continue
default若与其他case不匹配,则用default
do执行程序
enum枚举
extern说明变量或函数是在其他文件定义的,在此文件引用
goto无条件跳转语句
register将变量存于CPU的寄存器中,不能取地址
static声明静态变量
typedef给数据类型重命名
union声明联合体
unsigned无符号
volatile确保不会因编译器的优化而省略

11.1关键字typedef

类型重命名

#typedef int ElemType;

把int重命名为ElemType

11.2关键字static

  1. 修饰局部变量----静态局部变量
  2. 修饰全局变量----静态全局变量
  3. 修饰函数----------静态函数(使函数只能在源文件用,不能被其他文件引用)

11.3关键字#define

//define定义标识符常量
#define MAX 100

//define定义宏
#define ADD(x,y) ((x)+(y))

12指针

12.1内存

计算机程序都是在内存中进行的,所以为了有效的使用内存,把内存划分成一个个小小的内存单元,每个内存单元的大小是一个字节,为了能够有效的访问到内存的每个单元,给这些内存单元进行了编号,这些编号称为内存单元的地址

内存
一个字节0xFFFFFFFF
一个字节0xFFFFFFFE
一个字节0x00000002
一个字节0x00000001
一个字节0x00000000

变量是创建在内存中的,每个内存单元都有地址,所以变量也是有地址的,
取变量的地址如下:

#include<stdio.h>
int main()
{
	int num = 10;
	//num的地址为4个字节,取出的是第一个字节的地址
	printf("%p\n", &num);//%p是以地址的形式打印
	return 0;
}
内存
一个字节0xFFFFFFFF
一个字节0xFFFFFFFE
num10x0012ff47
num20x0012ff46
num30x0012ff45
num40x0012ff44
一个字节0x00000002
一个字节0x00000001
一个字节0x00000000

地址如何存储,需要定义指针变量

int num = 10;
int *p = &num;

13.2指针变量的大小

#include<stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
	printf("%p\n", sizeof(char *));
	printf("%p\n", sizeof(short *));
	printf("%p\n", sizeof(int *));
	printf("%p\n", sizeof(double *));
	return 0;
}

14结构体

结构体是一种数据结构,是多种数据类型的结合
例如:

struct stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	int id[15];//学号
};

结构体的初始化:

	struct stu s = { "张三", 20, "男", "20200101" };
	printf("name = %s age = %d sex = %s id = %s", s.name, s.age, s.sex, s.id);
	return 0;

本章完

  • 20
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贩梦先生007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值