在你的催促下,挤出点时间给你写下一篇,为了快速产出,后期的随笔全部采用MD风格(css的样式设置对我来说不是很熟)。
如果你用VS写C的话,新建win32控制台应用程序(或者Visual C++控制台应用程序,不同版本VS可能有点差异),然后选择空项目就可以了,在源文件目录下添加C++文件,但是文件扩展名改成c,默认是cpp。
基本语法
先上一段之前写过的代码:
#include <stdio.h>
void main()
{
// 这句话的意思是打印
printf("Matthew");
/* 声明变量 */
int a;
scanf_s("%d",&a);
/* 上面scanf_s是输入函数,
有scanf函数,
是不安全的,
用scanf_s代替 */
}
- c语言中,每个语句用分号';'结束,和换行没关系。
- c语言代码中可以包含注释,注释不编译不运行,只是对源文件中的代码及功能做一些描述
- '//' 是单行注释。注释不可以换行
- '/* */'是多行注释,可以在注释内换行,上述代码中有注释,自己找找看
- 标识符(c语言中的"名字")用来标识变量、函数或其他自定义结构等名称
- 标识符以字母 A-Z 或 a-z 或下划线 _ 开头,后跟零个或多个字母、下划线和数字(0-9)
- 标识符中不允许出现标点字符等特殊符号:比如 @、$ 和 %
- c语言中,区分大小写,ABC和abc是两个标识符
- 关键字(c语言中的保留字,不可用做标识符)
- 这些关键字包括void、int等上述程序出现过的词,还有好多将来你会遇到的,比如:if、else、float、double、char、goto等。具体可以自行bing(封杀度娘了,误人子弟)一下有哪些,时不时看一眼。
- C99 新增关键字:_Bool、_Complex、_Imaginary、inline、restrict
- C11 新增关键字:_Alignas、_Alignof、_Atomic、_Generic、_Noreturn、_Static_assert、_Thread_local
- 【说真的,我都不知道新增的这些,因为现在几乎不用C语言】
数据类型
编程的作用,通俗点讲就是操作机器,处理数据。数据的种类有很多,声音、图像等多媒体;社保、学籍等文本和数字数据;其他学科领域的抽象数据等。所以编程语言,在自己的系统中也将区分数据类型,以下是C语言中数据类型分类:
- 基本类型
- 位型(bit):就是一个位,值是0或1,传说中的计算机只认识0和1,就是这个类型。
- 字符型(char):就是一个符号,例如'a'、'P'、'6'等
- 整型(int):暂时可以理解为存整数用的
- 长整型(long):暂时可以理解为存特别大整数用的
- 浮点型(float):暂时可以理解为可以存带小数点的数的
- 双精度浮点型(double):暂时可以理解为可以存带很多小数点的数的
- 构造类型
- 数组类型(array):多个同类型的数据组合在一起的类型
- 结构体类型(struct):暂时可理解卫自己定义的类型,把不同的类型攒到一起的类型
- 共用体(union):暂时不需要你了解,随着学习进度看情况学习
- 枚举 (enum):一种特定的类型,可以一一列举其值
- void类型(空类型,无返回类型,表示没有可用值等意思,慢慢你就理解了)
- 指针类型(这是一个很重要的类型,而且你很难理解的类型,后面专门给你讲)
在上面的程序int a;
中就用到的了int类型,即整型。a是变量名标识符。不同类型的数据在内存中占用的空间大小和数据类型表示的值的范围是不一样的,下面给出一些定义,详细的可以自行bing。
整数类型
类型 | 存储大小 | 值范围 |
---|---|---|
cha | 1 字节 | -128 到 127 或 0 到 255 |
unsigned char | 1 字节 | 0 到 255 |
signed char | 1 字节 | -128 到 127 |
int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483, |
unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 字节 | -32,768 到 32,767 |
unsigned short | 2 字节 | 0 到 65,535 |
long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 字节 | 0 到 4,294,967,295 |
浮点类型
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位小数 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位小数 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位小数 |
以下是两个简单的代码查看数据类型占用多少存储空间:
#include <stdio.h>
#include <limits.h>
int main()
{
printf("int 存储大小 : %lu \n", sizeof(int));
return 0;
}
#include <stdio.h>
#include <float.h>
int main()
{
/* 头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节 */
printf("float 存储最大字节数 : %d \n", sizeof(float));
printf("float 最小值: %E\n", FLT_MIN );
printf("float 最大值: %E\n", FLT_MAX );
printf("精度值: %d\n", FLT_DIG );
return 0;
}
变量和常量
变量其实只不过是程序可操作的存储区的名称,例如int a=0;
的意思是,声明一个int类型的变量,变量的名字叫做a,a的初始值是0。此时a就是一个存储区指向的一个名字,a的值实际上是a这个变量所指向的内存中的一个位置的值,此时值是0。
变量的声明有几种形式:
- 不带初值,如
int a;
,还可以同时声明多个变量,逗号隔开,如char b,c;
- 带初值,如:
int a=0;
、int c=0,d=10;
、int a=0;b=a;
变量的值是可以改变的,如:
int a=0;
printf(a);
a=10;
printf(a);
常量的值是固定值,一般在程序初始化的时候就已经有了值。定义后不可修改,常量可以是任何基本数据类型(关于进制的内容,可以bing):
85 /* 十进制 */
0213 /* 八进制 */
0x4b /* 十六进制 */
30 /* 整数 */
30u /* 无符号整数 */
30l /* 长整数 */
30ul /* 无符号长整数 */
常量的定义方式一:预处理命令#define
#include <stdio.h>
#define LENGTH 10 // 常量LENGTH=10
#define WIDTH 5 // 常量WIDTH=5
#define NEWLINE '\n' // 常量NEWLINE=换行符
int main()
{
int area;
area = LENGTH * WIDTH;
printf("value of area : %d", area);
printf("%c", NEWLINE);
return 0;
}
常量的定义方式二:预处理命令const
关键字
#include <stdio.h>
int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
printf("value of area : %d", area);
printf("%c", NEWLINE);
return 0;
}