初识c语言

初识c语言

    • 背景
    • 发展历程
    • 本篇内容
      • 第一个c语言程序
        • #include的意义
        • 其他方式的写法
      • 数据类型
        • sizeof
      • 常量、变量
        • 常量的定义
        • 变量的定义
        • const对c语言的影响
      • 字符串
        • 字符串的定义
        • 转义字符
  • 总结概要

背景

C语言是一种通用的高级程序设计语言,由美国计算机科学家丹尼斯·里奇(Dennis Ritchie)在20世纪70年代开发出来。C语言的设计目标是提供一种灵活、高效的语言,可用于开发各种应用程序,尤其是系统软件和嵌入式系统。

C语言被广泛应用于操作系统、编译器、数据库、网络协议以及游戏开发等领域,它具有高效的性能、可移植性和灵活性,成为软件开发领域的重要工具。

C语言的定义是通过一系列的语法规则和语义规范,描述了程序的结构和行为。它使用了一套简洁明确的语法和标准函数库,提供了丰富的数据类型、运算符、控制语句和库函数,使得程序员可以高效地编写程序。

以下是C语言的一些基本概念:

  1. 变量和数据类型:C语言支持多种数据类型,如整数、浮点数、字符等,程序员可以声明变量并给其赋值。

  2. 运算符和表达式:C语言提供了丰富的数学运算符和逻辑运算符,可以进行各种计算和表达式求值。

  3. 控制流程:C语言提供了条件语句(如if-else语句和switch语句)和循环语句(如for循环和while循环),用于根据条件执行不同的代码块或循环执行特定的代码块。

  4. 函数:C语言允许程序员定义自己的函数,以模块化和重复使用代码,提高代码的可读性和可维护性。

  5. 指针:C语言支持指针,允许程序直接操作内存地址,可以用于高效地处理数组,访问函数参数,以及动态分配内存等。

  6. 结构体:(Structure)是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起,形成一个新的数据结构。结构体可以包含多个成员变量,每个成员变量可以是不同的数据类型。

  7. 文件操作:C语言提供了一组文件操作函数,可以读写文件,并进行文件的打开、关闭、读取和写入等操作。

  8. 预处理器:C语言使用预处理器指令,可以在编译前进行宏替换、条件编译和文件包含等预处理操作。

总的来说,C语言具有简洁的语法、高效的执行速度和强大的编程能力,是学习计算机编程和系统级开发的重要基础。

发展历程

C语言的发展历程可以追溯到20世纪70年代早期。以下是C语言的主要发展里程碑:

  1. 1969年-1973年:贝尔实验室的丹尼斯·里奇(Dennis Ritchie)与肯·汤普逊(Ken Thompson)合作开发了Unix操作系统。为了在Unix上编写系统软件,他们创造了B语言,它是一种高级的类似汇编的语言。

  2. 1972年-1973年:丹尼斯·里奇开始改进B语言,并在此基础上开发出了C语言。C语言是通过重写Unix操作系统的内核,使用C语言编写的第一个版本。C语言相比于B语言具有更好的可移植性和表达能力。

  3. 1978年:布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇共同合著了《The C Programming Language》一书,该书成为C语言学习指南的经典之作。该书的出版推动了C语言的普及和流行。

  4. 1983年:美国国家标准协会(ANSI)发布了《ANSI C标准》,定义了C语言的规范和标准化,称为ANSI C或C89。这一标准的制定促进了C语言的统一和跨平台的发展。

  5. 1989年:国际标准化组织(ISO)发布了《ISO C标准》,该标准也被称为C90或ISO C。与ANSI C相比,ISO C进行了一些修正和扩展,并加入了一些新特性,如函数原型和void指针等。

  6. 1999年:ISO发布了C语言的第三个标准,称为C99。C99增加了一些新特性,如内联函数、可变长度数组、单行注释等,进一步提升了C语言的功能和表达能力。

  7. 2011年:ISO发布了C语言的最新标准,被称为C11。C11引入了一些新的特性,如多线程支持、泛型宏、匿名结构体等,进一步改进了C语言的功能和灵活性。

除了标准化的发展,C语言还受到了许多编译器和开发工具的支持,如GNU C编译器(GCC)和Microsoft Visual C++等。这些工具提供了强大的开发环境和丰富的库函数,进一步促进了C语言的推广和应用。

总体而言,C语言凭借其高效性、可移植性和灵活性,成为广泛应用于系统开发、嵌入式系统、网络协议、游戏开发等领域的重要编程语言。同时,C语言也为后续的编程语言,如C++、Java等的发展奠定了基础。

本篇内容

本篇内容会带大家简单认识一下c语言,后续会有更加详细的c语言文章来呈现给大家。

第一个c语言程序

#include

//main是一个固定的名字
//main是主函数,是程序的入口,一个工程中有且只能有一个
//这里的int是整型
int main()
{
	//printf是C语言的一个库函数,它的功能是打印内容在屏幕上
	printf("Hello World");
	//return 是返回
	return 0;
}
//需要注意的是我们缩写的代码使用的符号都必须是英文的

初识c语言_第1张图片

#include的意义

在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头文件,使得程序可以使用其中定义的常用输入输出函数和相关定义,方便进行输入和输出操作。

而在该代码中的作用仅仅是printf函数的头文件(包括但不限于printf函数),#include的方式包含了这个头文件。

其他方式的写法
#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语言_第2张图片

sizeof

在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;
}

运行结果:
初识c语言_第3张图片
从图中我们可以看出他们所占空间的大小各有差异,在这里需要解释一下的sizeof算出的是byte(字节)大小,具体的单位换算如下:

bit
1byte=8bit
1KB=1024byte
1MB=1024KB
1GB=1024MB

至于为什么long 和 int 所占的空间大小一样,在c语言中它们的大小关系有下列的表述:

long long >= long >= int > short >char

常量、变量

常量的定义

常量是程序中固定不变的值。C语言中有不同类型的常量,如整数常量、浮点数常量、字符常量和字符串常量等。

常量的定义格式为:

数据类型 常量名 = 值;
  • 数据类型 指定常量的类型,如 intfloatchar 等。
  • 常量名 是常量的标识符,用于在程序中引用该常量。
  • 是常量的具体数值。

示例:

int MAX_VALUE = 100;
float PI = 3.14159;
char NEW_LINE = '\n';
变量的定义

变量是程序中用于存储和操作数据的一种容器。在C语言中,变量的定义需要指定变量的类型和标识符。

变量的定义格式为:

数据类型 变量名;
  • 数据类型 指定变量的类型,如 intfloatchar 等。
  • 变量名 是变量的标识符,用于在程序中引用该变量。

示例:

int a;
float b;
char c;

可以在定义变量的同时给其初始化,即指定变量的初始值:

数据类型 变量名 = 初始值;
  • 初始值 是变量的初始数值。

示例:

int a = 10;
float b = 3.14;
char c = 'A';

需要注意的是,变量的值可以在程序中改变,而常量的值在定义后不能被修改。

无论是常量还是变量,它们的定义通常在程序的函数体之外进行,即在函数外部(全局变量),或在函数内部但是在函数的开头(局部变量)。这样定义的变量和常量可以在整个函数内部使用。

const对c语言的影响

在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', '!'};

运行截图如下:
初识c语言_第4张图片

第二种方式出现这样的原因是因为我们前面提到过,字符串的结束标志是’\0’,第一种方式会自带’\0’,而第二种方式则不会,并且第一种方式更简便一些,如果大家一定要用第二种方式,只要在后面手动的添加’\0’就可以了,例如:

char str1[] = "Hello, World!";
char str2[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};

这样我们再运行一下,两种方式的结果就一样了
初识c语言_第5张图片

转义字符

转义字符是以反斜杠(\)开始的特殊字符序列。它们用于表示一些无法直接输入或在字符串中表示的字符,如换行符、制表符、引号等,或者顾名思义就是转变原有的意思。

例如我们想要打一下一串代码的话:
c:\code:\test.c

printf("c:\code:\test.c");

运行结果是什么样子呢
初识c语言_第6张图片
运行结果出现这样的情况就是因为’\t’是一个转义字符,打印出来会出现一个类似于Tab键的空格。我们如果想要避免以上情况只要再转义字符前再加一个’'就可以了,类似于负负得正的含义。

示例如下:
初识c语言_第7张图片
以下是c语言中常见的一些转义字符:
初识c语言_第8张图片
下面给大家分享一下ASCII码表:
初识c语言_第9张图片
需要注意的前32个字符为不可打印字符,并且在用八进制或16进制打印时也不要超出ASCII的范围,否则后果是有些无法预测的

总结概要

本篇内容到此就暂时分享完毕,主要带领大家简单认识一下c语言的基本常识,后续会有更多的个人拙见与大家分享,希望和各位小伙伴多多交流技术。

你可能感兴趣的:(c语言,开发语言)