【C语言入门学习】[1]初识C语言 01
2024.1.9更新
2024.2.20更新
#前言
什么是C语言?
- C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
- ANSI C,作为C语言最初的标准
- C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
- 其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C
- C语言介于机器语言和高级语言之间
一、基本概念
一、c语言的基本框架
- main函数是程序的入口
- return 0;函数正常运行结束时返回0
二、c语言的数据类型
- char //字符数据类型
- short //短整型
- int //整形
- long //长整型
- long long //更长的整形
- float //单精度浮点数
- double //双精度浮点数
- C语言有没有字符串类型?
add[]="String"
每种字符类型对应的字节大小
1 |
|
输出结果:
1
2
4
4
8
4
8
8 最大为8个字节 2的64次方(64位系统)
对于计算机内存的解释,见:
三、变量的作用域和生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用
的
而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
代码示例
1 | //作用域 |
#extern(关键字):
1 | //声明一下变量 |
1 | //生命周期 |
#define/const和enum
define 和const的区别
1.编译器处理阶段
define是预处理器预处理阶段完成,const是编译器开始编译程序阶段完成,因此#define先于const处理。
2.语法语义方面
define是宏定义,特点是简单原位做替换,其定义的常量值没有类型限定,也不做类型检查,在出现宏名称的地方直接展开。
const是关键字,本质上会定义一个只读变量,不可以更改,编译是检查常量值的类型是否匹配。
例如:
define PI 3.14159
int r = 25;
double s = rrPI;
r = 30;
s = rrPI;
预处理完成以后的代码是:
int r = 25;
double s = rr3.14159;
r = 30;
s = rr3.14159;
define明显是直接替换,PI出现几次,其数值3.14159出现几次。
// 必须指定正确的类型
const double PI = 3.14159 ;
int r = 25;
double s = rrPI;
r = 30;
s = rrPI;
const明显是声明和定义一个变量,分配内存空间保存3.14159的数值,以后使用时和普通变量一样取值,但是无法对其进行赋值修改。
3.#define宏只做替换,不做表达式计算,如果#define定义的不是单个数值,而是一个常量表达式,建议加上圆括号,避免出错。
例如:定义常量表示每个元素的大小是int+double型大小之和。
define N sizeof(int) + sizeof(double)
int m = 100;
// 根据输入的m变量值计算总的空间大小
int total = mN;
这是错误的,因为替换以后int total= msizeof(int) + sizeof(double);
正确写法是:
define N (sizeof(int) + sizeof(double))
展开以后:
int total = m*(sizeof(int) + sizeof(double));
使用const不存在以上问题,const会对表达式先计算。
const int N = sizeof(int) + sizeof(double);
int m = 100;
// 根据输入的m变量值计算总的空间大小
int total = m*N;
代码示例
1 |
|
#字符串和转义字符
由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符
串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容
注:使用strlen计算字符串长度时会将\0一并算入
转义字符 | x #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<math.h>//写一个代码,打印100~200之间的素数//素数-质数//只能被1和他本身整除//代码优化1://m=ab;//a和b中一定至少有一个数字是 <=开平方m的//16 = 28 = 4*4//所以,大于开平方m的就不需要判断是否为m的因子,减少循环执行次数//sqrt用于计算开平方的函数 -需要用到库函数 math.h//减少了循环的执行次数//代码优化2://偶数不可能是素数//修改for (i = 100; i <= 200; i )为for (i = 101; i <= 200; i += 2)int main(){ int i, j = 0; //判断i是不是质数 for (i = 101; i <= 200; i += 2) { int flag = 1;//定义一个参数,检测i是否能被 除了1和它本身的数 整除 for (j = 2; j <= sqrt(i); j) { if (i % j == 0) { flag = 0;//如果能被2到i-1之间的整除,记录flag=0; //break; } } if (flag == 1)//不能被2到i-1之间的数整除 { printf("%d是质数\n", i);//那么i就是质数 } } return 0;}c |
---|---|
? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
’ | 用于表示字符常量’ |
\“ | 用于表示一个字符串内部的双引号 |
\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。 如: \130 X |
\xdd | dd表示2个十六进制数字。 如: \x30 0 |
1 | //字符串就是一串字符 - 用双引号括起来的一串字符 |
四、ASCII码
1 | int main() |
#C语言的注释
1 | 注释: 是用来解释复杂代码的 |
#C语言的语句
1 | int main() |
#函数概念
1 | int Add(int x, int y) |
#数组概念
1 | int main() |
#c语言的操作符和关键字
基本操作符
常见关键字
1 | int main() |
#内存本质
总结:
计算机原理补充:
变量的二进制本质上是32位bit的,最高位为符号位,用&按位取反时会改变所有位
整数在内存中存储的是补码
补码 ->原码转换不会变符号位
一个内存单元大小为一个字节,然后再分配地址
1byte = 8bit