文章目录
- 1. 程序结构
- 1.1 Hello World示例
- 1.2 编译并执行C程序
- 2. 基本语法
- 2.1 C 标记
- 2.2 分号
- 2.3 注释
- 2.4 标识符
- 2.5 关键字
- 2.6 C中的空格
- 3. 数据类型
- 3.1 整数类型
- 3.2 浮点类型
- 3.3 void类型
从第一次学习C语言到现在已经时隔五年了,大部分知识都还给老师了,近期想着看一些教程复习一下C语言基础,从零开始做一下学习笔记记录。
1. 程序结构
1.1 Hello World示例
#include <stdio.h>
int main() {
/* my first program in C */
printf("Hello, World! \n");
return 0;
}
让我们看一下上述程序的各个部分:
- 程序
#include <stdio.h>
的第一行是预处理程序命令,该命令告诉C编译器在进行实际编译之前先包含stdio.h文件。 - 下一行
int main()
是程序执行开始的main函数。 - 下一行
/*...*/
将被编译器忽略,并且已在程序中添加了附加注释。因此,这些行在程序中称为注释。 - 下一行
printf(...)
是C语言中可用的另一个函数,该函数将消息“ Hello,World!”。在屏幕上显示。 - 下一行
return 0;
终止main()函数并返回值0。
即一个C程序基本上由以下部分组成:
- 预处理器命令
- 函数
- 变量
- 陈述与表达
- 注释
1.2 编译并执行C程序
以下是编译和运行C程序简单的步骤:
- 打开一个文本编辑器并添加上述代码。
- 将文件另存为hello.c
- 打开命令提示符,然后转到保存文件的目录。
- 键入
gcc hello.c
,然后按Enter编译代码。 - 如果代码中没有错误,则命令提示符将带你进入下一行,并将生成一个a.out可执行文件(windows 系统是a.exe)。
- 现在,键入./a.out以执行你的程序。
- 你将在屏幕上看到输出“Hello World”。
2. 基本语法
2.1 C 标记
一个C程序由各种标记组成,令牌可以是关键字,标识符,常量,字符串文字或符号。例如,以下C语句由五个标记组成:
printf("Hello, World! \n");
printf
(
"Hello, World! \n"
)
;
2.2 分号
注释就像在C程序中帮助文本一样,它们会被编译器忽略。它们以**/*开头并以字符*/**结束,如下所示-
/* my first program in C */
不能在注释中包含注释,并且它们也不会出现在字符串或字符文字中。
2.3 注释
在C程序中,分号是语句终止符。也就是说,每个单独的语句必须以分号结尾。它指示一个逻辑实体的结尾。
下面给出了两个不同的陈述-
printf("Hello, World! \n");
return 0;
2.4 标识符
C标识符是用于标识变量,函数或任何其他用户定义项目的名称。标识符以字母A到Z,a到z或下划线“_”开头,后跟零个或多个字母,下划线和数字(0到9)。C不允许在标识符中使用标点符号,例如@,$和%。C是区分大小写的编程语言。因此,Manpower和manpower是C中两个不同的标识符。这是一些合法的标识符示例-
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
2.5 关键字
下表显示了C中的保留(关键)字。这些保留字不得用作常量或变量或任何其他标识符名称。
- auto
- else
- long
- switch
- break
- enum
- register
- typedef
- case
- extern
- return
- union
- char
- float
- short
- unsigned
- const
- for
- signed
- void
- continue
- goto
- sizeof
- volatile
- default
- if
- static
- while
- do
- int
- struct
- _Packed
- double
2.6 C中的空格
仅包含空格(可能带有注释)的行称为空白行,而C编译器完全忽略它。空格是C语言中用来描述空格,制表符,换行符和注释的术语。
空格将语句的一部分与另一部分分开,并使编译器能够识别语句中一个元素(例如int)在何处结束以及下一个元素在何处开始。因此,在以下语句中
int age;
int和age之间必须至少有一个空格字符(通常是一个空格),以便编译器能够区分它们。另一方面,在以下语句中:
fruit = apples + oranges; // get the total fruit
在fruit和=之间,或在=和apples之间,不需要空格字符,但是如果你想增加可读性,可以随意添加一些字符,以便更好的维护性。
3. 数据类型
C中的数据类型是指用于声明不同类型的变量或函数的扩展系统。变量的类型决定了它在存储中占据多少空间以及如何解释所存储的位模式。
C中的类型可以分类如下:
类型 | 描述 |
---|---|
基本类型 | 它们是算术类型,并且进一步分为:(a)整数类型和(b)浮点类型。 |
枚举类型 | 它们还是算术类型,用于定义只能在整个程序中分配某些离散整数值的变量。 |
类型void | 类型说明符void指示没有可用值。 |
派生类型 | 它们包括(a)指针类型,(b)数组类型,(c)结构体类型,(d)联合类型 (e)函数类型。 |
数组类型和结构类型统称为集合类型。
函数的类型指定函数的返回值的类型。
3.1 整数类型
下表提供了标准整数类型的详细信息及其存储大小和值范围:
类型 | 容量 | 取值范围 |
---|---|---|
char | 1 byte | -128 to 127 or 0 to 255 |
unsigned char | 1 byte | 0 to 255 |
signed char | 1 byte | -128 to 127 |
int | 2 or 4 bytes | -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647 |
unsigned int | 2 or 4 bytes | 0 to 65,535 or 0 to 4,294,967,295 |
short | 2 bytes | -32,768 to 32,767 |
unsigned short | 2 bytes | 0 to 65,535 |
long | 8 bytes | -9223372036854775808 to 9223372036854775807 |
unsigned long | 8 bytes | 0 to 18446744073709551615 |
要获取特定平台上类型或变量的确切大小,可以使用sizeof运算符。表达式sizeof(type)产生对象或类型的存储大小(以字节为单位)。下面给出的示例使用limits.h头文件中定义的不同常量获取计算机上各种类型的大小-
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("CHAR_BIT : %d\n", CHAR_BIT);
printf("CHAR_MAX : %d\n", CHAR_MAX);
printf("CHAR_MIN : %d\n", CHAR_MIN);
printf("INT_MAX : %d\n", INT_MAX);
printf("INT_MIN : %d\n", INT_MIN);
printf("LONG_MAX : %ld\n", (long) LONG_MAX);
printf("LONG_MIN : %ld\n", (long) LONG_MIN);
printf("SCHAR_MAX : %d\n", SCHAR_MAX);
printf("SCHAR_MIN : %d\n", SCHAR_MIN);
printf("SHRT_MAX : %d\n", SHRT_MAX);
printf("SHRT_MIN : %d\n", SHRT_MIN);
printf("UCHAR_MAX : %d\n", UCHAR_MAX);
printf("UINT_MAX : %u\n", (unsigned int) UINT_MAX);
printf("ULONG_MAX : %lu\n", (unsigned long) ULONG_MAX);
printf("USHRT_MAX : %d\n", (unsigned short) USHRT_MAX);
return 0;
}
当编译并执行上述程序时,它在Linux上产生以下结果-
CHAR_BIT : 8
CHAR_MAX : 127
CHAR_MIN : -128
INT_MAX : 2147483647
INT_MIN : -2147483648
LONG_MAX : 9223372036854775807
LONG_MIN : -9223372036854775808
SCHAR_MAX : 127
SCHAR_MIN : -128
SHRT_MAX : 32767
SHRT_MIN : -32768
UCHAR_MAX : 255
UINT_MAX : 4294967295
ULONG_MAX : 18446744073709551615
USHRT_MAX : 65535
windows运行结果则有些不同:
CHAR_BIT : 8
CHAR_MAX : 127
CHAR_MIN : -128
INT_MAX : 2147483647
INT_MIN : -2147483648
LONG_MAX : 2147483647
LONG_MIN : -2147483648
SCHAR_MAX : 127
SCHAR_MIN : -128
SHRT_MAX : 32767
SHRT_MIN : -32768
UCHAR_MAX : 255
UINT_MAX : 4294967295
ULONG_MAX : 4294967295
USHRT_MAX : 65535
3.2 浮点类型
下表提供了标准浮点类型的详细信息以及存储大小和值范围及其精度-
类型 | 容量 | 取值范围 | 精确 |
---|---|---|---|
float | 4字节 | 1.2E-38至3.4E + 38 | 小数点后6位 |
double | 8字节 | 2.3E-308至1.7E + 308 | 小数点后15位 |
long double | 10字节 | 3.4E-4932至1.1E + 4932 | 小数点后第19位 |
头文件float.h定义了宏,这些宏使得我们可以使用这些值以及有关程序中实数二进制表示形式的其他详细信息。
以下示例显示浮点类型占用的存储空间及其范围值:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("Storage size for float : %d \n", sizeof(float));
printf("FLT_MAX : %g\n", (float) FLT_MAX);
printf("FLT_MIN : %g\n", (float) FLT_MIN);
printf("-FLT_MAX : %g\n", (float) -FLT_MAX);
printf("-FLT_MIN : %g\n", (float) -FLT_MIN);
printf("DBL_MAX : %g\n", (double) DBL_MAX);
printf("DBL_MIN : %g\n", (double) DBL_MIN);
printf("-DBL_MAX : %g\n", (double) -DBL_MAX);
printf("Precision value: %d\n", FLT_DIG );
return 0;
}
当编译并执行上述程序时,它在Linux上产生以下结果-
Storage size for float : 4
FLT_MAX : 3.40282e+38
FLT_MIN : 1.17549e-38
-FLT_MAX : -3.40282e+38
-FLT_MIN : -1.17549e-38
DBL_MAX : 1.79769e+308
DBL_MIN : 2.22507e-308
-DBL_MAX : -1.79769e+308
Precision value: 6
windows上运行结果与linux相同:
3.3 void类型
void类型指定没有可用值。
它在三种情况下使用:
类型 | 说明 |
---|---|
函数返回为空 | C中有各种函数不返回任何值,或者可以说它们返回void。没有返回值的函数的返回类型为void。例如,void exit(int status; |
函数参数为void | C中有各种函数,它们不接受任何参数。没有参数的函数可以接受空白。例如,int rand(void; |
void指针 | 类型为void *的指针表示对象的地址,但不表示其类型。例如,一个内存分配函数void * malloc(size_t size); 返回指向void的指针,该指针可以转换为任何数据类型。 |