对于c
语言有了初步的理解之后,我们就可以学习真正意义上的c
语言程序设计了,从今天开始,将从每个小的知识点进行讲解,逐步的引入常用的函数及操作符,今天的主要内容为结构体、自定义函数、数据占用空间的计算、常用的操作符等
什么是结构体?又为什么要引入结构体的概念?在c
语言中如何定义结构体?定义的结构体如何使用,本节将从这几个方面进行详细的阐述。
结构体的官网定义,可以自己查看百度词条的解释,下面链接可以直达:
结构体
大家可以自行查看,我在此处仅以我自己对其的理解进行解读:
在我看来,结构体就是把一些和某一个参数有关的参数存放在一个容器中,以后想要使用其中的某个参数时,直接条用该结构体即可,
比如在雷达中有很多的参数,载频,带宽,脉宽等等,或者车辆的位置、速度、加速度等信息,前述内容参数均与雷达有关,后述内容均与车辆有关,那么我就可以定义两个结构体,在访问带宽或者速度时直接调用结构体即可
为什么要引用结构体呢,当某个参数下变量有很多时,结构体可以清楚的帮助我们定义和访问相关的数据,封装好的结构体方面使用,这对于项目开发极为重要,某参数经常使用时,不必在每个函数中都声明某个变量的值,只需定义在结构体内,需要时访问即可。
在c
语言中,结构体的定义方式需要使用关键字struct
,其定义格式如下:
Radar
的结构体,然后将要定义的参数名以及类型放入其中struct Radar radar = {xx,xxx,xxx};
注意:此处的radar即为真正的结构体的名字,以后想用用其值直接“radar.”进行索引即可
整个流程如以下实例代码:
#include
struct Radar
{
int fc ;
int B ;
double Tp ;
char type ;
//其余的变量依次定义即可
};
struct Radar radar ={25000,12,0.125,'r'};
int main()
{
double sum = 0;
sum = radar.Tp - radar.B;
printf("雷达的类型为%c\n",radar.type);
printf("雷达的带宽为%d\n",radar.B);
printf("sum = %lf\n",sum);
return 0;
}
在此处我们定义了一个名字为radar的结构体,定义的类型有我们熟悉的整型
,还算熟悉的双精度浮点型
,不是很熟悉的字符型
,下面简要介绍字符变量。
字符变量
即为存放字符常量的变量,同样如果多个字符进行存储,自然就成为了字符串类型
,
整型和双精度浮点型的打印类型想必大家早已了然于心,今天新介绍两种打印类型------字符的打印类型为%c
,字符串的打印类型为%s
,保存编译运行可以得到以下结果:
注:结构体的定义位置并未有强制的说明,在主函数前还是主函数中,都可以,但是为了方便后期的维护与修改,我还是建议
放在主函数前,并在声明结构体后马上进行赋值
,这样代码的可读性较好
诚然,c
语言已经为我们准备好了很多的函数,供我们使用,但是实现特定功能的函数还是需要我们自己定义和编写,下面介绍如何自定义函数。
假设我们想要写一个整数加法的函数,那么对于一个函数而言,肯定得有输入吧,不然我怎么得到输出呢,此处假定自定义的函数名为Add
,既然得有输入,那么是不是就得写成这样:
Add(int x,int y)
这样此函数就有了输入x和输入y,那么这个函数是干什么的呢,是不是要实现加法运算,所以就需要在该函数内部书写功能:如下:
Add(int x, int y)
{
int z = x + y;
return z;
}
将输入的x和y相加得到和为z,我得到了两个数的和,那我是不是得将他输出出来,不然我怎么知道结果是几,因此此处不是往常的return 0
了,
在自定义函数完成后,如想使用,直接使用该文件名然后赋予输入值即可吗,如下:
sum = Add(a,b);
其中a和b为输入值,下面为完整代码:
//自定义函数
#include
int main()
{
int Add1(int x,int y)
{
int z = 0;
z = x +y;
return z;
}
int a = 5;
int b = 6;
int sum = 0;
sum = Add1(a,b);
printf("sum = %d",sum);
return 0 ;
}
保存编译运行,可以得到以下结果:
说明程序书写正确,上述即是自定义函数的内容,同时:
注意:
自定义的函数必须写在主函数文件内部
,不能像结构体一样任意位置均可以,否则报错
2023/05/28 修改:上句话不对,其实只要在使用该函数前声明函数
即可,不管是在int main
函数内,还是之外
最近我们学习了很多的变量,那么变量的大小究竟是多少呢,在学习本将之前,我们需要对计算机空间的大小有一个基本的了解。
在计算机中,最小的计量单位也就是比特
了,比特也就相当于一个位置,用来存放二进制数据0或者1
,上图:
上图中的每一个位置都相当于一个比特
用来存放数据。
那么一直来用比特
来表示和存储数据显然很麻烦,因此,字节产生了,由8个比特
组成的就成为一个字节
千字节也就就是我们常说的kB了,其中
1kB= 1024B
再高的存储单元如MB,GB,TB等,相邻的单位之间均是1024倍的关系,在此就不一一介绍了,如有需要,自行查询。
在了解了计算机最基本的存储单位后,即可以对我们的变量类型的占用的空间大小进行计算,计算的主要函数 为sizeof
函数,想要知道哪个变量的大小直接使用即可,示例代码如下:
int main()
{
int a = 1;
double b = 3.14;
char c = 'm';
printf("a占用空间为%d\n",sizeof(a));
printf("b占用空间为%d\n",sizeof(b));
printf("c占用空间为%d\n",sizeof(c));
return 0;
}
在上述代码中,我们要计算整型、双精度浮点型、字符型的大小,保存编译可以得到以下的结果:
每个计算出的结果的单位为字节
,由此可以看出,整型的大小为4个字节,双精度浮点型的大小为8个字节,字符的大小为1个字节,结合上述和前一章所学内容,变量a的存储数据则为:
00000000000000000000000000000001
由此可见,计算机是多么的强大。
注意:整型的大小并非一定是4个字节,与此相似的还有指针类型
int 建议为一个机器字长。32位环境下机器字长为4字节,64位环境下机器字长为8字节。
在c
语言环境中,有很多很多的操作符,在此处介绍几种较为常用的操作符,其余操作符用到时再进行讲解。
“\”为转义操作符,从名字中可以看出,其转变了原本的意思
,比如最常见的,在打印函数中总会用到\n
,为什么使用它就可以换行呢,这也就是转移操作符的用处,将一个普通变量n转变为了具有换行功能。
\ddd
操作符代表着1–3个八进制数,既然是八进制,其只能由0 1 2 3 4 5 6 7
这这几个数字组成了,计算如下所占用空间
c:\c_learn:\test.c\667
在计算之前,你自己想一下答案是几呢,数一数,是不是以为是22呢,
由于此处打印的是字符串的长度,打印字符串长度的命令为strlen
(string length的缩写)
示例代码如下:
printf("长度为%d\n",strlen("c:\c_learn:\test.c\667"));
这是由于\c
、\t
、\667
由于转义字符\
的作用,变为了其他含义,只占用了一个字节,
其实在前面指针的内容中,已经使用了取地址操作符&
,使用该符号可以将数据所在的地址取出
如果要进行一个数的递加或者递减操作,可以使用以下操作符,
i++;
i--;
++i;
--i;
两种递增和递减方式有所不同,下面用代码进行阐述:
#include
int main()
{
int a = 10;
int b = 1;
int c = a++;//先赋值,再加1
int d = b--;//先赋值,再减1
printf("c =%d\n d =%d\n",c,d);
printf("a =%d\n b =%d\n",a,b);
int a1 = 100;
int b1 = 20;
int c1 = ++a1;//先加1,再赋值
int d1 = --b1;//先减1,再赋值
printf("c1 =%d\n d1 =%d\n",c1,d1);
printf("a1 =%d\n b1 =%d\n",a1,b1);
return 0;
}
保存编译,结果如下:
大家可以很清楚看出两种方式的区别,注释中也进行了说明,总结如下:
前置++,先加1,再赋值
后置++,先赋值,再加1
上述内容即为本次的所有内容了,当然了操作符还有很多很多,但并不打算全部讲解,用到的时候再进行讲解,那么多操作符,谁也记不住,哈哈哈哈。
感谢各位朋友的观看,如果方便,可以顺便点个赞和关注呦,谢谢大家!!