本文用于学习C语言,备考计算机二级C语言考试,课程需要及个人兴趣所向,欢迎学习指正,持续更新!
前言
本次学习内容为数组、函数、指针、编译预处理和动态存储分配、结构体和共用体、文件。
一、数组
1. 一维数组
一个数组元素实际上是一个变量名,代表内存中的存储单元,一个数组占据的是一个连续的存储单元。
int a[10];//a[0],a[1]等都是变量名字,但是存储空间是连续的(不同于链表是不连续的)
int b[3] = {
0,1,2};//花括号
int c[5] = {
0,1};//后面的元素自动补0,此时c[5] = {0,1,0,0,0}
int d[] = {
0,1,2,3,4};//此时数组大小为5,相当于d[5]
2.二维数组
先存储第一行的元素,再存储后面行的元素;
可以省略第一行方括号中的常量表达式的,但不能省略第二行的。
int a[2][3] = {
{
1,5},{
4,7,8}};
int b[][4] = {
{
1,2},{
4,4}};//合法的,其中第一行常量为2,第二行自动补0
/* int c[5][];不合法的 */
3.字符数组
与上同,不同的是自动补
'/0'
空字符,且C语言中字符串视为字符数组,结尾有字符串结束标志'/0'
#include "stdio.h"
#include "string.h"
void main()
{
char a[] = {
'h','w','j'};
char b[5];
gets(b);//从终端输入一个字符串
puts(b);//输出字符串b[5]
strcpy(a,b);//用字符串b的元素覆盖字符串a[],长度也可覆盖,函数返回值为字符数组a[3]的首地址
//puts(a);
strcat(a,b);//拼接a、b,函数返回值为字符数组a[3]的首地址
int length_s = strlen(a);//返回字符串长度、
int bool_s = strcmp(a,b);//比较a,b所指字符串大小,a>b则返回正数,a<b则返回0
}
二、函数
1、函数概述
C语言中除主函数外的子程序都是由函数实现的。一个C程序只能有一个主函数,由主函数调用其他函数,其他子函数之间可以相互调用;
C程序的执行总是从main()函数开始,调用其他函数执行完毕后回到main()函数,继续执行main()中的程序,直到main()函数运行结束则整个程序结束。
函数分类如下:
1、标准函数,即库函数
2、自定义函数(有参函数、无参函数)
2、函数的参数及返回值
形式参数和实际参数
1、定义函数时,函数名后圆括号中的变量为”形式参数“(”形参“);
2、在主调函数中,函数后面圆括号中参数为”实际参数“(”实参)。
例如:
#include "stdio.h"
//全局变量,全局可用
int b = 0;
void main()
{
//局部变量,只可在函数内使用
int a = 0;
//声明函数
void function1(x);
void function2(y);
//调用函数
function1(a); //实际参数
function2(b); //实际参数
//打印结果
printf("%d & %d", a,b);
}
//定义函数
void function1(int x) //形式参数
{
x += 12138;
}
void function2(int y) //形式参数
{
b += 12138;
}
输出:0 & 12138
其中x,y为形参,形参用于将实参的值传入函数,后续形参的改变不会影响实参的值,如本例中的function1。
本例中a为全局变量,b为局部变量
函数的返回值
调用函数后返回主调函数一个确定的值,定义函数为void类型则可以无返回值;
例如:
#include "stdio.h"
void main()
{
int a = 0;
//声明函数
int fun(int x);
a = fun(a);
printf("a = %d", a);
}
int fun(int x)
{
x = x+1;
return x;//将x的值传回主调函数
}
输出:a = 1
return类型必须和函数定义时的类型保持一致,否则以函数类型为准进行强制转换
3、函数的调用
由上面两个例子可以看出,一般调用函数之前需要声明函数
函数声明
若函数定义在调用之前,则调用时无需声明,反之则必须声明;
声明形式:类型名 函数名(参数类型1,参数类型2 ,…)或加上参数名
例如: int fun(int); 或 int fun(int x);
嵌套调用与递归调用
嵌套调用:函数里再调用别的函数;
递归调用:函数里再调用自己。
4、函数中变量的存储类别
1、auto变量:所定义的变量为自动类别,存储在内存,占用内存单元;
2、register变量:所定义的变量为自动类别,存储在寄存器,不占用内存单元;
3、static变量:同上,静态局部变量,该变量内存不会释放,每次进入函数都使用相同位置的存储空间,在编译时赋予初值,执行时不再赋予。
三、指针
更新于2022.10.15