C 程序由各类令牌组成,令牌能够是关键字、标识符、常量、字符串值,或者是一个符号。例如,下面的 C 语句包括五个令牌:html
printf("Hello, World! \n");
编程
这五个令牌分别是:windows
printf ( "Hello, World! \n" ) ;
在 C 程序中,分号是语句结束符。也就是说,每一个语句必须以分号结束。它代表一个逻辑实体的结束。数组
C 语言有两种注释方式:app
// 单行注释 以 // 开始的单行注释,这种注释能够单独占一行。
/* 单行注释 */ /* 多行注释 多行注释 多行注释 */ /* */ 这种格式的注释能够单行或多行。
您不能在注释内嵌套注释,注释也不能出如今字符串或字符值中。编程语言
C 标识符是用来标识变量、函数,或任何其余用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。函数
C 标识符内不容许出现标点字符,好比 @、$ 和 %。C 是区分大小写的编程语言。所以,在 C 中,Manpower 和 manpower 是两个不一样的标识符。布局
C 中的保留字。不能做为常量名、变量名或其余标识符名称。ui
在这里查看有哪些关键字.net
只包含空格的行,被称为空白行,可能带有注释,C 编译器会彻底忽略它。
在 C 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(好比 int)在哪里结束,下一个元素在哪里开始。所以,在下面的语句中:
int age;
在这里,int 和 age 之间必须至少有一个空格字符(一般是一个空白符),这样编译器才可以区分它们。另外一方面,在下面的语句中:
fruit = apples + oranges; // 获取水果的总数
fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,可是为了加强可读性,您能够根据须要适当增长一些空格。
在 C 语言中,数据类型指的是用于声明不一样类型的变量或函数的一个普遍的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
可分为如下几种:
序号 | 类型与描述 |
---|---|
1 | 基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型。 |
2 | 枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其必定的离散整数值的变量。 |
3 | void 类型: 类型说明符 void 代表没有可用的值。 |
4 | 派生类型: 它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。 |
数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。
下表列出了关于标准整数类型的存储大小和值范围的细节:
类型 | 存储大小 | 值范围 |
---|---|---|
char | 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,647 |
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 |
注意,各类类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
如下列出了32位系统与64位系统的存储大小的差异(windows 相同):
在Linux中:i686是i386的子集应对高级别CPU的,是32位,x86_64是64位
为了获得某个类型或某个变量在特定平台上的准确大小,您可使用 sizeof 运算符。表达式 sizeof(type) 获得对象或类型的存储字节大小。下面的实例演示了获取 int 类型的大小:
#include <stdio.h> #include <limits.h> int main() { printf("int 存储大小 : %lu \n", sizeof(int)); return 0; }
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
int 存储大小 : 4
%lu 为 32 位无符号整数,详细说明查看 C 库函数 - printf()。
下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
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 位小数 |
头文件 float.h 定义了宏,在程序中可使用这些值和其余有关实数二进制表示的细节。下面的实例将输出浮点类型占用的存储空间以及它的范围值:
#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; }
%E 为以指数形式输出单、双精度实数,详细说明查看 C 库函数 - printf()。
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
float 存储最大字节数 : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6
void 类型指定没有可用的值。它一般用于如下三种状况下:
序号 | 类型与描述 |
---|---|
1 | 函数返回为空 C 中有各类函数都不返回值,或者您能够说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status); |
2 | 函数参数为空 C 中有各类函数不接受任何参数。不带参数的函数能够接受一个 void。例如 int rand(void); |
3 | 指针指向 void 类型为 void * 的指针表明对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,能够转换为任何数据类型。 |
若是如今仍是没法彻底理解 void 类型,不用太担忧,在后续的章节中将会详细讲解这些概念。
变量是程序可操做的存储区的名称。C 中每一个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值均可以存储在内存中,运算符可应用于变量上。
变量的名称能够由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不一样的,由于 C 是大小写敏感的。基于前一章讲解的基本类型,有如下几种基本的变量类型:
类型 | 描述 |
---|---|
char | 一般是一个字节(八位)。这是一个整数类型。 |
int | 对机器而言,整数的最天然的大小。 |
float | 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。![]() |
double | 双精度浮点值。双精度是1位符号,11位指数,52位小数。![]() |
void | 表示类型的缺失。 |
变量定义就是告诉编译器在何处建立变量的存储,以及如何建立变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,以下所示:
type variable_list;
在这里,type 必须是一个有效的 C 数据类型,能够是 char、int、float、double 或任何用户自定义的对象,variable_list 能够由一个或多个标识符名称组成,多个标识符之间用逗号分隔。下面列出几个有效的声明:
int i, j, k; char c, ch; float f, salary; double d;
变量能够在声明的时候被初始化(指定一个初始值)
type variable_name = value;
下面列举几个实例:
extern int d = 3, f = 5; // d 和 f 的声明与初始化 int d = 3, f = 5; // 定义并初始化 d 和 f byte z = 22; // 定义并初始化 z char x = 'x'; // 变量 x 的值为 'x'
没有初始化时,变量的值时NULL(全部字节的值都是 0)
变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不须要知道变量完整细节的状况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序链接时编译器须要实际的变量声明。
变量的声明有两种状况:
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; }
执行结果以下:
result 为: 3
若是须要在一个源文件中引用另一个源文件中定义的变量,咱们只需在引用的文件中将变量加上 extern 关键字的声明便可。
addtwonum.c
#include <stdio.h> /*外部变量声明*/ extern int x ; extern int y ; int addtwonum() { return x+y; }
test.c
#include <stdio.h> /*定义两个全局变量*/ int x=1; int y=2; int addtwonum(); int main(void) { int result; result = addtwonum(); printf("result 为: %d\n",result); return 0; }
当上面的代码被编译和执行时,它会产生下列结果:
$ gcc addtwonum.c test.c -o main $ ./main result 为: 3
C 中有两种类型的表达式:
变量是左值,所以能够出如今赋值号的左边。数值型的字面值是右值,所以不能被赋值,不能出如今赋值号的左边。
// 下面是一个有效的语句; int g = 20; // 下面这个就不是一个有效的语句,会生成编译时错误; 10 = 20;
参考自:https://www.runoob.com/cprogramming/c-tutorial.html