编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

C语言基础入门(c语言基础入门书籍推荐)

gowuye 2024-04-25 04:45 9 浏览 0 评论

## 什么是C语言?

C语言是一种通用的、过程式的计算机编程语言,由贝尔实验室的Dennis Ritchie在20世纪70年代初期开发。C语言的设计目标是提供一种能够高效地编写系统软件的语言,因此它被广泛应用于操作系统、编译器、数据库等领域。

## C语言的特点

* C语言是一种过程式编程语言,与面向对象编程语言不同,它不支持类和继承等特性。

* C语言是一种低级语言,它直接操作计算机硬件,需要程序员了解计算机的底层原理。

* C语言是一种静态类型语言,变量必须在声明时指定数据类型,编译器会在编译期间检查类型错误。

* C语言是一种广泛使用的编程语言,它的语法简单、易于学习,同时也具有较高的执行效率。

## C语言的基础语法

* 变量:变量是用来存储数据的容器,变量名必须以字母或下划线开头。例如:`int a;`表示一个整型变量a。

* 常量:常量是指不可改变的值,用关键字`const`来定义。例如:`const int MAX = 10;`表示一个整型常量MAX,其值为10。

* 数据类型:C语言中有多种数据类型,包括整型、浮点型、字符型等。例如:`int a;`表示一个整型变量a,`float b;`表示一个浮点型变量b。

* 运算符:C语言中的运算符用于对数据进行操作,包括算术运算符、关系运算符、逻辑运算符等。例如:`a + b;`表示将a和b相加的结果赋值给a。

* 控制语句:C语言中的控制语句用于控制程序的流程,包括条件语句(if-else)、循环语句(for、while)等。例如:`if (a > b) { printf("a is greater than b"); }`表示如果a大于b,则输出"a is greater than b"。

## 数据类型

在C语言中,有多种不同的数据类型可供选择。以下是一些常见的数据类型:

* 整型(int):用于表示整数,包括正整数、负整数和零。例如:`int a = 10;`

* 浮点型(float):用于表示小数,包括单精度浮点数和双精度浮点数。例如:`float b = 3.14;`

* 字符型(char):用于表示单个字符,包括ASCII码表中的字符。例如:`char c = 'A';`

* 布尔型(bool):用于表示真或假的值,只有两个取值:true和false。例如:`bool flag = true;`

* 字符串型(string):用于表示文本字符串,由一系列字符组成。例如:`char str[] = "Hello, world!";`

## 变量

在C语言中,变量是用来存储数据的容器。变量可以分为局部变量和全局变量两种类型。

### 局部变量

局部变量是在函数内部定义的变量,只在该函数内部有效。局部变量的作用域仅限于该函数内部,因此在函数外部无法访问。

void func() {
	int localVar = 10; // 局部变量localVar
}

### 全局变量

全局变量是在程序的任何位置都可以访问的变量。全局变量的作用域是整个程序,因此可以在函数内部和函数外部访问。

int globalVar = 10; // 全局变量globalVar
void func() {
	printf("%d", globalVar); // 在函数内部访问全局变量globalVar
}
int main() {
  printf("%d", globalVar); // 在函数外部访问全局变量globalVar
  return 0;
}

## 运算符

在C语言中,运算符用于对数据进行操作。以下是一些常见的运算符:

* 算术运算符:用于执行数学运算,包括加、减、乘、除等。例如:`a + b;`表示将a和b相加的结果赋值给a。

* 关系运算符:用于比较两个值的大小关系,包括等于、不等于、大于、小于等。例如:`a == b;`表示判断a是否等于b。

* 逻辑运算符:用于对布尔值进行逻辑运算,包括与、或、非等。例如:`a && b;`表示判断a和b是否同时为真。

* 位运算符:用于对二进制数进行位操作,包括按位与(&)、按位或(|)、按位异或(^)等。例如:`a & b;`表示将a和b的二进制表示按位与后的结果赋值给a。

## 控制语句

在C语言中,控制语句用于控制程序的流程。以下是一些常见的控制语句:

* if-else语句:用于根据条件执行不同的代码块。例如:

if (a > b) {
	printf("a is greater than b");
} else {
	printf("a is not greater than b");
}

* for循环语句:用于重复执行一段代码块,直到满足某个条件为止。例如:

for (int i = 0; i < 10; i++) {
	printf("%d", i);
}

* while循环语句:当指定的条件为真时,重复执行一段代码块。例如:

int i = 0;
while (i < 10) {
  printf("%d", i);
  i++;
}

## 数组

在C语言中,数组是一种用于存储相同类型数据的容器。以下是一些常见的数组操作:

* 声明数组:使用方括号[]来声明一个数组,并指定数组的类型和大小。例如:`int arr[10];`表示声明一个包含10个整型元素的数组。

* 访问数组元素:使用下标运算符[]来访问数组中的元素。例如:`arr[0] = 1;`表示将数组的第一个元素赋值为1。

* 修改数组元素:通过下标运算符[]来修改数组中的元素。例如:`arr[0] = 2;`表示将数组的第一个元素赋值为2。

* 遍历数组:可以使用循环语句来遍历数组中的所有元素。例如:

int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < 10; i++) {
  printf("%d ", arr[i]);
}

以上代码会输出数组中的所有元素。

## 指针

在C语言中,指针是一种特殊的变量,它存储了另一个变量的内存地址。以下是一些常见的指针操作:

* 声明指针:使用星号(*)来声明一个指针变量,并指定指针所指向的数据类型。例如:`int *ptr;`表示声明一个指向整型变量的指针。

* 获取指针所指向的值:使用箭头运算符(*)来获取指针所指向的值。例如:`*ptr = 2;`表示将指针所指向的值赋值为2。

* 通过指针间接访问变量:使用取地址符(&)来获取变量的内存地址,并将其赋值给指针变量。例如:`int a = 10; int *p = &a;`表示将变量a的内存地址赋值给指针p。

* 通过指针修改变量的值:通过指针间接访问变量,并对其进行修改。例如:`*p = 20;`表示将指针p所指向的变量的值修改为20。

## 函数

在C语言中,函数是一种可重用的代码块,用于执行特定的任务。以下是一些常见的函数操作:

* 声明函数:使用关键字`void`和返回类型来声明一个函数。例如:`void func(int a, int b) { ... }`表示声明一个名为`func`的函数,该函数接受两个整型参数并返回空值。

* 定义函数:使用函数名和一对括号来定义一个函数。例如:

void func(int a, int b) {
  int sum = a + b;
  printf("%d", sum);
}

以上代码定义了一个名为`func`的函数,该函数接受两个整型参数并将它们的和打印出来。

* 调用函数:使用函数名和一对括号来调用一个函数。例如:`func(10, 20);`表示调用名为`func`的函数,并将参数10和20传递给它。

* 传递参数:通过参数列表来向函数传递参数。参数列表由参数类型、参数名和逗号分隔符组成。例如:`func(3, 4);`表示调用名为`func`的函数,并将参数3和4传递给它。

* 返回值:通过返回语句来返回函数的结果。返回语句使用关键字`return`后跟表达式或变量名。例如:`int add(int a, int b) { return a + b; }`表示定义一个名为`add`的函数,该函数接受两个整型参数并返回它们的和。

## 字符串操作

在C语言中,字符串是一种由字符组成的数据类型。以下是一些常见的字符串操作:

* 定义字符串:使用双引号或单引号将字符序列括起来来定义一个字符串。例如:`char str[] = "Hello, world!";`表示定义一个名为`str`的字符数组,其中包含字符串"Hello, world!"。

* 获取字符串长度:使用函数`strlen()`来获取一个字符串的长度。该函数接受一个指向字符串的指针作为参数,并返回字符串的长度。例如:`int len = strlen(str);`表示获取字符串`str`的长度,并将其存储在变量`len`中。

* 连接字符串:使用函数`strcat()`或`strncat()`来连接两个字符串。这两个函数的区别在于第一个参数指定要连接的字符串的结束位置。例如:

char str1[] = "Hello";
char str2[] = "world!";
strcat(str1, str2); // 将str2添加到str1的末尾
printf("%s", str1); // 输出"Helloworld!"

以上代码将字符串"world!"添加到字符串"Hello"的末尾,并将结果打印出来。

* 查找子串:使用函数`strstr()`来查找一个字符串是否包含另一个字符串。该函数接受三个参数:要查找的字符串、要查找的起始位置和要查找的结束位置。如果找到了子串,则返回指向子串的第一个字符的指针;否则返回NULL。例如:

char str[] = "Hello, world!";
char sub[] = "world";
char *pos = strstr(str, sub);
if (pos != NULL) {
	printf("Found '%s' at position %d\n", sub, pos - str);
} else {
	printf("Substring not found\n");
}

以上代码查找字符串"Hello, world!"中是否包含子串"world",并将结果打印出来。

## 结构体和联合体

在C语言中,结构体和联合体是两种自定义数据类型。以下是一些常见的结构体和联合体操作:

* 定义结构体:使用关键字`struct`来定义一个结构体。例如:

struct student {
  int id;
  char name[20];
  int age;
};

以上代码定义了一个名为`student`的结构体,其中包含三个成员变量:`id`、`name`和`age`。

* 访问结构体成员:通过点运算符`.`来访问结构体中的成员变量。例如:`student.id`表示访问结构体`student`的`id`成员变量。

* 定义联合体:使用关键字`union`来定义一个联合体。例如:

union data_type {
  int i;
  float f;
  char c;
};

以上代码定义了一个名为`data_type`的联合体,其中可以存储整型、浮点型或字符类型的值。

* 访问联合体成员:与访问结构体成员类似,通过点运算符`.`来访问联合体中的成员变量。例如:`data_type.i`表示访问联合体`data_type`的整型成员变量。

* 联合体的内存对齐:由于不同类型的数据占用的字节数可能不同,因此在使用联合体时需要注意内存对齐的问题。为了避免不必要的内存浪费和提高程序的执行效率,编译器通常会对联合体的成员变量进行内存对齐。

## 文件操作

在C语言中,文件操作是一种常见的编程技术,用于读写文件中的数据。以下是一些常见的文件操作函数:

* `fopen()`:用于打开一个文件,并返回一个指向该文件的指针。例如:`FILE *fp = fopen("example.txt", "r");`表示以只读模式打开名为"example.txt"的文件,并将返回值存储在指针变量`fp`中。

* `fclose()`:用于关闭一个已经打开的文件。例如:

FILE *fp = fopen("example.txt", "r");
// 读取文件内容
fclose(fp);

以上代码首先使用`fopen()`函数打开名为"example.txt"的文件,并将返回值存储在指针变量`fp`中。然后读取文件内容,最后使用`fclose()`函数关闭该文件。

* `fread()`:用于从一个文件中读取指定数量的数据,并将其存储到一个数组中。例如:

FILE *fp = fopen("example.txt", "r");
int arr[10];
fread(arr, sizeof(int), 10, fp);
fclose(fp);

以上代码首先使用`fopen()`函数打开名为"example.txt"的文件,并将返回值存储在指针变量`fp`中。然后定义一个包含10个整型元素的数组`arr`,使用`fread()`函数从文件中读取10个整型元素,并将其存储到数组`arr`中。最后使用`fclose()`函数关闭该文件。

* `fwrite()`:用于将一个数组中的数据写入到一个文件中。例如:

FILE *fp = fopen("example.txt", "w");
int arr[10] = {1, 2, 3, 4, 5};
fwrite(arr, sizeof(int), 5, fp);
fclose(fp);

以上代码首先使用`fopen()`函数以写入模式打开名为"example.txt"的文件,并将返回值存储在指针变量`fp`中。然后定义一个包含5个整型元素的数组`arr`,使用`fwrite()`函数将数组中的数据写入到文件中。最后使用`fclose()`函数关闭该文件。

## 预处理器

在C语言中,预处理器是一种用于在编译前对源代码进行处理的机制。以下是一些常见的预处理器指令:

* `#include`:用于包含其他文件中的代码。例如:`#include <stdio.h>`表示包含标准输入输出库(stdio.h)中的代码。

* `#define`:用于定义宏。例如:

#define PI 3.1415926

以上代码定义了一个名为PI的宏,其值为3.1415926。

* `#ifdef`、`#ifndef`、`#else`、`#elif`、`#endif`:用于条件编译。例如:

#ifdef DEBUG
printf("Debug mode is enabled.\n");
#else
printf("Debug mode is disabled.\n");
#endif

以上代码使用条件编译来判断是否启用了调试模式,如果启用了调试模式,则输出"Debug mode is enabled.",否则输出"Debug mode is disabled."。

* `#error`:用于在编译时产生错误信息。例如:

#error "Invalid input!"
int main() {
// ...
}

以上代码使用`#error`指令在编译时产生错误信息"Invalid input!",并终止程序的执行。

以上就是C语言基础入门的知识。


系列文章持续更新,如果觉得有帮助请点赞+关注!

相关推荐

Nginx 响应提速10倍,你需要知道的缓存性能优化——FastCGI调优
Nginx 响应提速10倍,你需要知道的缓存性能优化——FastCGI调优

Nginx缓存优化是帮助大家提升网站性能的重要操作之一,proxy_cache主要用于反向代理时,对后端内容源服务器进行缓存;fastcgi_cache主要用于...

2024-05-20 14:44 gowuye

王者荣耀天魔缭乱和逐梦之音返场活动地址 3月22日开启返场活动
王者荣耀天魔缭乱和逐梦之音返场活动地址 3月22日开启返场活动

王者荣耀官方终于确定了天魔缭乱和逐梦之音的返场活动,这让不少小伙伴乐开了花,返场活动将会在3月22日开启,下面就带来王者荣耀天魔缭乱和逐梦之音返场活动地址!王者...

2024-05-20 14:44 gowuye

常见的嵌入式web服务器有哪些?

嵌入式WEB服务器常见的有:Lighttpd,Shttpd,Thttpd,Boa,Mini_httpd,Appweb,Goahead。Lighttpd地址:http://www.light...

简述几款常见的嵌入式web服务器
简述几款常见的嵌入式web服务器

嵌入式web服务器,是web服务器当中的一种,是基于嵌入式系统而实现的web服务器。指的是在嵌入式系统(通俗点就是单片机系统)上实现的一个web服务器,可以通过...

2024-05-20 14:44 gowuye

教你如何利用fastcgi_cache缓存加速WordPress

在使用nginx缓存之前,必须在nginx里面加载专门的模块,这个模块叫做ngx_cache_purge。添加ngx_cache_purge模块下载ngx_cache_purge模块ngx_cache...

扫描WordPress漏洞

检测已知漏洞WPScan是一款广泛使用的WordPress安全扫描工具,它的一项重要功能是检测已知漏洞。在这篇文章中,我们将深入探讨WPScan如何检测已知漏洞,并结合实际示例,帮助读者更好地理解和应...

消灭 Bug!推荐几个给力的开源 Bug 跟踪工具
消灭 Bug!推荐几个给力的开源 Bug 跟踪工具

在这个充满bug的世界里,最遥远的距离不是生与死,而是你亲手制造的bug就在你眼前,你却怎么都找不到它。因此本文准备了7款优秀的开源bug跟踪系...

2024-05-20 14:43 gowuye

生物信息分析入门全攻略

生物信息学是生命科学研究的重大前沿领域,未来将占据生命科学研究的半壁江山。已经有越来越多的小伙伴投入到生物信息的学习中,但是入门难、深入慢、摸不到方向等都成为持续学习的拦路虎。本文根据生物信息技术大牛...

elkb实践经验,再赠送一套复杂的配置文件
elkb实践经验,再赠送一套复杂的配置文件

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。宝剑锋从磨砺出,梅花香自苦寒来。诗人白居易,三月下江南,看到沿路开放的桃花,心潮澎湃...

2024-05-20 14:43 gowuye

超详细从0到1 搭建ELK监控
超详细从0到1 搭建ELK监控

监控分类?Metrics用于记录可聚合的数据。例如,1、队列的当前深度可被定义为一个度量值,在元素入队或出队时被更新;HTTP请求个数可被定义为一个计数器,...

2024-05-20 14:42 gowuye

嵌入式开发 之Web配置页面开发
嵌入式开发 之Web配置页面开发

1.PHP是最好的语言??开发动态页面首选的语言是PHP,村村不能在这里忽悠人,如果你的硬件性能允许切略懂PHP,看到这里就可以退出了。本文面向的受众是Linu...

2024-05-20 14:42 gowuye

Python开发一个网站目录扫描工具用来检测网站是否有漏洞?
Python开发一个网站目录扫描工具用来检测网站是否有漏洞?

开发一个网站目录扫描工具是用来检测网站是否有非法目录请求的一个常见需求之一,我们要通过这个扫描工具来找到通过某个域名可以访问到的网站路径,可能对于有些系统来讲,...

2024-05-20 14:42 gowuye

创建一个类似Youtube的Id——使用PHP/Python/JS/Java/SQL

id通常都是用数字,不巧的是只有10个数字来使用,所以如果你有很多的记录,id往往变得非常冗长。当然对于计算机来说无所谓,但我们更希望id尽可能短。所以我们如何能使id变短?我们可以利用字母让它们附加...

快速云:有助于移动应用安全开发的五条妙计
快速云:有助于移动应用安全开发的五条妙计

许多企业不断地向其开发团队提供培训。但是某些漏洞,如早在十多年前就发现的SQL注入,如今仍广泛存在于各种应用中。因而,安全培训永不过时。在开发移动应用时,开发者...

2024-05-20 14:41 gowuye

洛杉矶国际电影节最佳动画短片奖影片《G’DAY》正式全网上映
洛杉矶国际电影节最佳动画短片奖影片《G’DAY》正式全网上映

7月2日,由M&CSaatchi创作,由深受好评的澳大利亚导演迈克尔·格雷西执导的动画短片《G’day》,正式在全网上映。该影片因其出色的创意赢得了洛...

2024-05-20 14:41 gowuye

取消回复欢迎 发表评论: