C 程序结构
C Hello World 实例
C 程序主要包括以下部分:
预处理器指令
函数
变量
语句 & 表达式
注释
让我们看一段简单的代码,可以输出单词 "Hello World":
#include
int main()
{
/* this is my first c program*/
printf("Hello, World! \n");
return 0;
}
接下来我们讲解一下上面这段程序:
程序的第一行 #include 是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。
下一行 int main() 是主函数,程序从这里开始执行。
下一行 /*...*/ 将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释。
下一行 printf(...) 是 C 中另一个可用的函数,会在屏幕上显示消息 "Hello, World!"。
下一行 return 0; 终止 main() 函数,并返回值 0。
C 基本语法
我们已经看过 C 程序的基本结构,这将有助于我们理解 C 语言的其他基本的构建块。
C 的关键字
下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。
关键字
说明
auto
声明自动变量
break
跳出当前循环
case
开关语句分支
char
声明字符型变量或函数返回值类型
const
声明只读变量
continue
结束当前循环,开始下一轮循环
default
开关语句中的"其它"分支
do
循环语句的循环体
double
声明双精度浮点型变量或函数返回值类型
else
条件语句否定分支(与 if 连用)
enum
声明枚举类型
extern
声明变量或函数是在其它文件或本文件的其他位置定义
float
声明浮点型变量或函数返回值类型
for
一种循环语句
goto
无条件跳转语句
if
条件语句
int
声明整型变量或函数
long
声明长整型变量或函数返回值类型
register
声明寄存器变量
return
子程序返回语句(可以带参数,也可不带参数)
short
声明短整型变量或函数
signed
声明有符号类型变量或函数
sizeof
计算数据类型或变量长度(即所占字节数)
static
声明静态变量
struct
声明结构体类型
switch
用于开关语句
typedef
用以给数据类型取别名
unsigned
声明无符号类型变量或函数
union
声明共用体类型
void
声明函数无返回值或无参数,声明无类型指针
volatile
说明变量在程序执行中可被隐含地改变
while
循环语句的循环条件
C99 新增关键字
_Bool
_Complex
_Imaginary
inline
restrict
C11 新增关键字
_Alignas
_Alignof
_Atomic
_Generic
_Noreturn
_Static_assert
_Thread_local
C 数据类型
在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
C 中的类型可分为以下几种:
序号
类型与描述
1
基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型。
2
枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
3
void 类型: 类型说明符 void 表明没有可用的值。
4
派生类型: 它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。
数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。在本章节接下来的部分我们将介绍基本类型,其他几种类型会在后边几个章节中进行讲解。
整数类型
下表列出了关于标准整数类型的存储大小和值范围的细节:
下表列出了关于标准整数类型的存储大小和值范围的细节:
类型
存储大小 32 /64
值范围
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 相同):
sizeof32-64.jpg
下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:
类型
存储大小
值范围
精度
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
#include
int main()
{
printf("long size is : %lu \n", sizeof(long double));
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;
}
long size is : 16
float 存储最大字节数 : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6
Process finished with exit code 0
void 类型
void 类型指定没有可用的值。它通常用于以下三种情况下:
序号
类型与描述
1
函数返回为空 C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);
2
函数参数为空 C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);
3
指针指向 void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。
如果现在您还是无法完全理解 void 类型,不用太担心,在后续的章节中我们将会详细讲解这些概念。
常用基本数据类型占用空间(64位机器为例)
char : 1个字节
int :4个字节
float:4个字节
double:8个字节
基本类型书写
整数
a,默认为10进制 ,10 ,20。
b,以0开头为8进制,045,021。
c.,以0b开头为2进制,0b11101101。
d,以0x开头为16进制,0x21458adf。
小数
单精度常量:2.3f 。
双精度常量:2.3,默认为双精度。
字符型常量
用英文单引号括起来,只保存一个字符'a'、'b' 、'*' ,还有转义字符 '\n' 、'\t'。
字符串常量
用英文的双引号引起来 可以保存多个字符:"abc"。
1、数据类型转换:C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型;在 C 语言中也可以对数据类型进行强制转换;
2、自动转换规则:
a)浮点数赋给整型,该浮点数小数被舍去;
b)整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中;
3、强制类型转换形式: (类型说明符)(表达式)