C语言是一种通用的高级程序设计语言,由美国计算机科学家丹尼斯·里奇(Dennis Ritchie)在20世纪70年代开发出来。C语言的设计目标是提供一种灵活、高效的语言,可用于开发各种应用程序,尤其是系统软件和嵌入式系统。
C语言被广泛应用于操作系统、编译器、数据库、网络协议以及游戏开发等领域,它具有高效的性能、可移植性和灵活性,成为软件开发领域的重要工具。
C语言的定义是通过一系列的语法规则和语义规范,描述了程序的结构和行为。它使用了一套简洁明确的语法和标准函数库,提供了丰富的数据类型、运算符、控制语句和库函数,使得程序员可以高效地编写程序。
以下是C语言的一些基本概念:
变量和数据类型:C语言支持多种数据类型,如整数、浮点数、字符等,程序员可以声明变量并给其赋值。
运算符和表达式:C语言提供了丰富的数学运算符和逻辑运算符,可以进行各种计算和表达式求值。
控制流程:C语言提供了条件语句(如if-else语句和switch语句)和循环语句(如for循环和while循环),用于根据条件执行不同的代码块或循环执行特定的代码块。
函数:C语言允许程序员定义自己的函数,以模块化和重复使用代码,提高代码的可读性和可维护性。
指针:C语言支持指针,允许程序直接操作内存地址,可以用于高效地处理数组,访问函数参数,以及动态分配内存等。
结构体:(Structure)是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起,形成一个新的数据结构。结构体可以包含多个成员变量,每个成员变量可以是不同的数据类型。
文件操作:C语言提供了一组文件操作函数,可以读写文件,并进行文件的打开、关闭、读取和写入等操作。
预处理器:C语言使用预处理器指令,可以在编译前进行宏替换、条件编译和文件包含等预处理操作。
总的来说,C语言具有简洁的语法、高效的执行速度和强大的编程能力,是学习计算机编程和系统级开发的重要基础。
C语言的发展历程可以追溯到20世纪70年代早期。以下是C语言的主要发展里程碑:
1969年-1973年:贝尔实验室的丹尼斯·里奇(Dennis Ritchie)与肯·汤普逊(Ken Thompson)合作开发了Unix操作系统。为了在Unix上编写系统软件,他们创造了B语言,它是一种高级的类似汇编的语言。
1972年-1973年:丹尼斯·里奇开始改进B语言,并在此基础上开发出了C语言。C语言是通过重写Unix操作系统的内核,使用C语言编写的第一个版本。C语言相比于B语言具有更好的可移植性和表达能力。
1978年:布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇共同合著了《The C Programming Language》一书,该书成为C语言学习指南的经典之作。该书的出版推动了C语言的普及和流行。
1983年:美国国家标准协会(ANSI)发布了《ANSI C标准》,定义了C语言的规范和标准化,称为ANSI C或C89。这一标准的制定促进了C语言的统一和跨平台的发展。
1989年:国际标准化组织(ISO)发布了《ISO C标准》,该标准也被称为C90或ISO C。与ANSI C相比,ISO C进行了一些修正和扩展,并加入了一些新特性,如函数原型和void指针等。
1999年:ISO发布了C语言的第三个标准,称为C99。C99增加了一些新特性,如内联函数、可变长度数组、单行注释等,进一步提升了C语言的功能和表达能力。
2011年:ISO发布了C语言的最新标准,被称为C11。C11引入了一些新的特性,如多线程支持、泛型宏、匿名结构体等,进一步改进了C语言的功能和灵活性。
除了标准化的发展,C语言还受到了许多编译器和开发工具的支持,如GNU C编译器(GCC)和Microsoft Visual C++等。这些工具提供了强大的开发环境和丰富的库函数,进一步促进了C语言的推广和应用。
总体而言,C语言凭借其高效性、可移植性和灵活性,成为广泛应用于系统开发、嵌入式系统、网络协议、游戏开发等领域的重要编程语言。同时,C语言也为后续的编程语言,如C++、Java等的发展奠定了基础。
本篇内容会带大家简单认识一下c语言,后续会有更加详细的c语言文章来呈现给大家。
#include
//main是一个固定的名字
//main是主函数,是程序的入口,一个工程中有且只能有一个
//这里的int是整型
int main()
{
//printf是C语言的一个库函数,它的功能是打印内容在屏幕上
printf("Hello World");
//return 是返回
return 0;
}
//需要注意的是我们缩写的代码使用的符号都必须是英文的
在C语言中,#include
是一个预处理指令,它的作用是包含C标准库中的stdio.h头文件。头文件是一种包含函数原型、宏定义和类型声明的文件,它提供了一些常用的输入输出函数和相关的定义,如printf、scanf和文件操作函数等。
使用#include
指令可以告诉C编译器在编译过程中将stdio.h头文件的内容插入到当前代码文件中。这样,程序就可以使用stdio.h中定义的函数和常量了。
具体来说,stdio.h
头文件包含了与标准输入输出(Input/Output)相关的函数和定义。例如,其中定义了printf函数用于输出格式化的数据到屏幕上,以及scanf函数用于从标准输入获取数据。此外,stdio.h还包含了有关文件输入输出的函数和常量,如fopen、fclose、FILE等。
通过包含
,程序可以利用stdio.h中定义的函数来完成常见的输入输出操作,同时减少了重复编写这些函数原型和常量定义的工作。
需要注意的是,
是C语言标准库的头文件之一,头文件的名称和内容可能因不同的编译器和操作系统而有所差异。因此,编写C程序时,通常需要根据编译环境的不同来使用适当的头文件。
总结起来,#include
的意义是通过包含stdio.h头文件,使得程序可以使用其中定义的常用输入输出函数和相关定义,方便进行输入和输出操作。
而在该代码中
#include
void main()
{
printf("Hello World!");
}
与第一种的区别:
int main()形式:
第一种:返回值类型为int,表示主函数的返回值。主函数的返回值通常用于向操作系统报告程序的执行状态,约定俗成的规定是返回0表示程序成功执行,非零值表示执行出错。
可以使用return语句来返回整数值,如return 0;。
void main()形式:
返回值类型为void,表示主函数没有返回值。
不允许使用return语句来返回值,因为主函数被声明为void类型,不能返回值。
在某些编译器中,可以使用exit(0);来替代return 0;来表示程序执行成功并退出,但这是非标准的用法。
总结:
在大多数C编译器中,int main()形式是主函数的标准形式,被广泛接受并被C语言标准所推荐。使用int main()形式的好处是可以明确地返回程序的执行状态,并且符合C语言标准的规定。
而void main()形式主要是对历史遗留的一种写法,某些编译器可能仍然支持它。但请注意,根据C语言标准,void main()形式是不被推荐使用的。推荐的做法是使用int main()形式,并在程序结束时返回一个合适的整数值。
2
#include
int main(void)
{
printf("Hello World!");
return 0;
}
这种与第一种的不同在于其中void表示main函数不接受任何的参数。
#include
int main(int argc, char* argv[])//其中int argc, char* argv[]表示main要接受的参数
{
printf("Hello World");
return 0;
}
这种形式的主函数接受两个参数:
argc(argument count)表示命令行参数的数量,包括程序名称本身。至少为1。
argv(argument vector)是一个指向字符指针的数组,每个指针指向一个命令行参数的字符串。
这种形式的主函数通常用于接受命令行参数,并根据参数来进行不同的操作或处理。
在C语言中没种数据类型所占的空间大小是不一样的,在这里给大家介绍一个库函数:sizeof,它可以计算每种数据类型所占的空间的大小,我们可以用代码来计算每种类型所占的空间的大小,如下:
#include
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
return 0;
}
运行结果:
从图中我们可以看出他们所占空间的大小各有差异,在这里需要解释一下的sizeof算出的是byte(字节)大小,具体的单位换算如下:
bit
1byte=8bit
1KB=1024byte
1MB=1024KB
1GB=1024MB
至于为什么long 和 int 所占的空间大小一样,在c语言中它们的大小关系有下列的表述:
long long >= long >= int > short >char
常量是程序中固定不变的值。C语言中有不同类型的常量,如整数常量、浮点数常量、字符常量和字符串常量等。
常量的定义格式为:
数据类型 常量名 = 值;
数据类型
指定常量的类型,如 int
、float
、char
等。常量名
是常量的标识符,用于在程序中引用该常量。值
是常量的具体数值。示例:
int MAX_VALUE = 100;
float PI = 3.14159;
char NEW_LINE = '\n';
变量是程序中用于存储和操作数据的一种容器。在C语言中,变量的定义需要指定变量的类型和标识符。
变量的定义格式为:
数据类型 变量名;
数据类型
指定变量的类型,如 int
、float
、char
等。变量名
是变量的标识符,用于在程序中引用该变量。示例:
int a;
float b;
char c;
可以在定义变量的同时给其初始化,即指定变量的初始值:
数据类型 变量名 = 初始值;
初始值
是变量的初始数值。示例:
int a = 10;
float b = 3.14;
char c = 'A';
需要注意的是,变量的值可以在程序中改变,而常量的值在定义后不能被修改。
无论是常量还是变量,它们的定义通常在程序的函数体之外进行,即在函数外部(全局变量),或在函数内部但是在函数的开头(局部变量)。这样定义的变量和常量可以在整个函数内部使用。
在C语言中,使用 const 关键字可以对代码的行为和特性产生一些影响。
常量性:
const 关键字用于声明常量,将变量声明为常量后,其值在程序中是不可修改的。这可以确保常量的值不会被意外地修改,增加了代码的可读性和可维护性。
类型检查和安全性:
const 关键字提供了更强的类型检查。在使用 const 声明的常量中,编译器会检查类型匹配以避免类型错误。这样可以在编译时捕获一些错误,提高代码的安全性和可靠性。
编译时优化:
编译器可以使用 const 常量的值来进行编译时优化,例如常量折叠(Constant Folding)。在执行表达式求值时,编译器可以直接用常量的值进行计算,避免了重复计算,提高代码的执行效率。
作用域限制:
const 关键字可以用于限制变量的作用域,使其只在声明的作用域内有效。这有助于提高代码的模块化和封装性,避免变量的误用。
const影响的具体表现
用const修饰变量时其本质还是变量
例如:
#include
int main()
{
const int a=3;
int arr[a] = { 0,1,2,3 };//190行
printf("%d", arr[a]);
return 0;
}
上述代码会报错,而报错的原因:
因为c语言中,const修饰的变量其本质上还是变量,数组[ ]中只接收常量,所以会报错,但在c++中则没有这样的问题,c++直接把const修饰的变量当作常量来使用,用兴趣的小伙伴可以用c++来试一下
总的来说,const 关键字对C语言的影响主要体现在提高代码的可读性和可维护性、增强类型检查和安全性、提供编译时优化的机会、限制变量作用域等方面。通过合理使用 const 关键字,可以编写更加安全、高效和易于理解的代码。
在C语言中,字符串是由字符组成的数组。可以使用字符数组来表示字符串,字符数组的最后一个元素需要是字符串的终止符\0。这个终止符表示字符串的结束。
例如
char str1[] = "Hello, World!";
上述为正确使用字符串形式,将其打印出来的话,截图如下:
可能有些小伙伴会好奇为什么不使用第二种形式,我们把两种形式放在一起打印出来看一下有什么区别
char str1[] = "Hello, World!";
char str2[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'};
第二种方式出现这样的原因是因为我们前面提到过,字符串的结束标志是’\0’,第一种方式会自带’\0’,而第二种方式则不会,并且第一种方式更简便一些,如果大家一定要用第二种方式,只要在后面手动的添加’\0’就可以了,例如:
char str1[] = "Hello, World!";
char str2[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
转义字符是以反斜杠(\)开始的特殊字符序列。它们用于表示一些无法直接输入或在字符串中表示的字符,如换行符、制表符、引号等,或者顾名思义就是转变原有的意思。
例如我们想要打一下一串代码的话:
c:\code:\test.c
printf("c:\code:\test.c");
运行结果是什么样子呢
运行结果出现这样的情况就是因为’\t’是一个转义字符,打印出来会出现一个类似于Tab键的空格。我们如果想要避免以上情况只要再转义字符前再加一个’'就可以了,类似于负负得正的含义。
示例如下:
以下是c语言中常见的一些转义字符:
下面给大家分享一下ASCII码表:
需要注意的前32个字符为不可打印字符,并且在用八进制或16进制打印时也不要超出ASCII的范围,否则后果是有些无法预测的
本篇内容到此就暂时分享完毕,主要带领大家简单认识一下c语言的基本常识,后续会有更多的个人拙见与大家分享,希望和各位小伙伴多多交流技术。