1 函数
C语言的函数是一段可重用的代码,它可以执行特定的任务。函数在C语言中被定义为一组语句,并且可以有输入和输出。函数的定义包括函数的返回类型、函数名、参数列表和函数体。
以下是C语言中定义和调用函数的一般语法:
<返回类型> <函数名>(<参数列表>) {
// 函数体
// 执行特定的任务
// 返回值(可选)
}
int main() {
// 调用函数
<函数名>(<参数列表>);
return 0;
}
其中,<返回类型>
指定了函数的返回值类型,例如int
、float
、void
等。<函数名>
是给函数起的名字,可以根据需要自定义。<参数列表>
是指定函数的输入参数,可以为空或包含多个参数,多个参数之间用逗号分隔。<函数体>
是函数的具体实现,包含一组语句,用于执行特定的任务。如果函数需要返回值,则使用return
语句返回结果。
函数的调用是通过函数名和实参列表进行的。在main
函数中,可以通过写函数名和实参列表的方式调用函数,例如<函数名>(<实参列表>)
。调用函数时,实参的数量和类型必须与函数定义中的形参相匹配。
下 面是一个简单的例子,演示如何定义和调用一个C语言函数:
#include <stdio.h>
// 定义函数
void sayHello() {
printf("Hello, C!\n");
}
int main() {
// 调用函数
sayHello();
return 0;
}
运行程序将输出Hello, C!
。
#include <stdio.h>
int sum(int a,int b) // 求两个数之和
{
int num = a + b;
return num;
}
int main() {
int x = 5;
int y = 10;
int z;
z = sum(x, y);
printf("%d",z);
return 0;
}
2 数组
在C语言中,数组是一种用于存储相同类型数据元素的数据结构。它可以存储多个元素,并且可以通过索引访问和操作数组中的元素。C语言中的数组是固定大小的,即在定义数组时需要指定数组的长度。
以下是C语言中数组的一般语法:
<数据类型> <数组名>[<数组长度>];
其中,<数据类型>
指定了数组中元素的类型,例如int
、float
、char
等。<数组名>
是给数组起的名字,可以根据需要自定义。<数组长度>
是数组的大小,表示数组可以存储的元素数量。
要访问数组中的元素,可以使用索引。索引从0开始,表示数组中的第一个元素,依次递增。可以通过<数组名>[<索引>]
的方式访问数组中的元素。
以下是一个简单的例子,演示了如何定义和使用C语言数组:
#include <stdio.h>
int main() {
// 定义一个包含5个整数的数组
int numbers[5];
// 初始化数组的元素
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
// 访问和打印数组的元素
printf("Element at index 0: %d\n", numbers[0]);
printf("Element at index 1: %d\n", numbers[1]);
printf("Element at index 2: %d\n", numbers[2]);
printf("Element at index 3: %d\n", numbers[3]);
printf("Element at index 4: %d\n", numbers[4]);
return 0;
}
运行程序将输出以下结果:
Element at index 0: 10
Element at index 1: 20
Element at index 2: 30
Element at index 3: 40
Element at index 4: 50
注意,数组的长度是在定义数组时指定的,不能超过数组长度的范围进行访问,否则会导致数组越界错误。
#include <stdio.h>
int main() {
int arr1[10] = { 0,1,2,3,4,5,6,7,8,9 }; // 数组
char arr2[56];
printf("%d\n", arr1[8]);
return 0;
}
3 操作符
C语言中有多种操作符,用于执行各种操作和计算。以下是一些常用的C语言操作符:
- 算术操作符:用于执行基本的算术运算,如加法
+
、减法-
、乘法*
、除法/
、取余%
等。 - 关系操作符:用于进行比较操作,返回一个布尔值(0表示假,非0表示真),如相等
==
、不相等!=
、大于>
、小于<
、大于等于>=
、小于等于<=
等。 - 逻辑操作符:用于进行布尔运算,如逻辑与
&&
、逻辑或||
、逻辑非!
等。 - 赋值操作符:用于将一个值赋给一个变量,如赋值
=
- 位操作符:用于对二进制位进行操作,如按位与
&
、按位或|
、按位异或^
、按位取反~
、左移<<
、右移>>
等。 - 条件操作符(三目运算符):用于根据条件选择不同的值,语法为
条件 ? 结果1 : 结果2
。 - 自增和自减操作符:用于对变量进行自增或自减操作,分别为
++
和--
。 - 指针操作符:用于操作指针变量,如取地址
&
、取值*
。 - 成员操作符:用于访问结构体或联合体的成员,使用
.
。 - 条件操作符:用于判断条件,并根据条件结果来执行代码块。
- 逗号操作符:用于连接多个表达式,以逗号分隔。
#include <stdio.h>
int main() {
int a = 7 / 2;
int b = 7 % 2; // 取模
int c = (int)3.14; //强制转化
if (1 && 0)
{
printf("逻辑与");
}
if (1 || 0)
{
printf("逻辑或");
}
int d = (a > b ? a : b); //三目运算符
printf("%d\n", d);
//printf("%d\n", arr1[8]);
return 0;
}
以上只是C语言中的一些常用操作符,实际上C语言中还有其他一些特殊的操作符,用于执行更复杂的操作。操作符的优先级和结合性也是需要注意的,可以使用括号来明确优先级和执行顺序。
4 关键字
C语言中有一些关键字,这些关键字具有特殊的含义,不能用作标识符(变量名、函数名等)。以下是C语言的一些关键字:
auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while。
这些关键字在C语言中有特定的语法和用法,用来定义变量、控制结构、数据类型等。在编程过程中,需要避免将关键字作为标识符使用,否则会导致编译错误。
关键词:typedef,对类型重新命名
#include <stdio.h>
typedef unsigned int uint;
typedef struct Node
{
int data;
struct Node* next;
} Node;
int main() {
unsigned int num = 0;
uint num2 = 0; // 等价于上面
struct Node n;
Node n2; //等价于上面
return 0;
}
关键词:static
在C语言中:
static是用来修饰变量和函数的
1.修饰局部变量-称为静态局部变量:static修饰局部变量的时候,局部变量出了作用域,不销毁的。本质上,static修饰局部变量的时候,改变了变量的存储位置的。生命周期和程序一样。
2.修饰全局变量-称为静态全局变量:static修饰全局变量的时候这个全局变量的外部链接属性就变成了内部链接属性。其他源文件(.c)就不能再使用到这个全局变量了。
3.修饰函数-称为静态函数:一个函数本来是具有外部链接属性的但是被static修饰的时候,外部链接属性变成了内部链接属性,其他源文件(.c)就无法使用了。
#include <stdio.h>
extern int g_val; //声明外部变量
void test()
{
static int a = 1;
a++;
printf("% d\n", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
关键词:register -建议变量放在寄存器中。
关键词:define
在C语言中,#define
是一个预处理指令,用于定义宏。宏是一种在代码中定义的简单文本替换,用于提高代码的可读性和重用性。
使用#define
关键字可以创建宏定义,其语法如下:
#define 宏名 替换文本
在编译过程中,所有出现宏名的地方都会替换为相应的替换文本。例如:
#define PI 3.14159
float circle_area(float radius) {
return PI * radius * radius;
}
在上述代码中,#define PI 3.14159
定义了一个名为PI的宏,它的替换文本是3.14159。在circle_area
函数中可以直接使用PI宏来表示圆的面积计算公式。
宏定义可以用于定义常量、函数、条件判断等,可以提高代码的可读性和代码的复用性。但是需要注意宏展开的结果是简单的文本替换,没有类型检查,可能会导致意外的错误,因此在使用宏时需要谨慎。