【C语言跬步积累】——解引用操作符(*)、取地址操作符(&)复习、结构体(struct)、单精度型和双精度型的区别

目录

一.解引用操作符(*)、取地址操作符(&)(复习)

1.例析

二.结构体(struct)

1.什么是结构体

2.例析

 3.详解

(1)语法

(2)分析

4.补充:float和double之间的区别

最后: 


一.解引用操作符(*)、取地址操作符(&)(复习)

1.例析

#include
int main()
{
	int a = 20;
	int* p = &a;
	*p = 10;
	printf("%p\n", p);
	printf("%p\n", &a);
	printf("%d\n", *p);
	printf("%d\n", a);
	return 0;
}

输出结果

【C语言跬步积累】——解引用操作符(*)、取地址操作符(&)复习、结构体(struct)、单精度型和双精度型的区别_第1张图片

 分析

  • int* p:p是指针变量,定义指针变量需要在相关的数据类型后面加上*,此处的*并非是解引用操作符,仅仅是一种格式,并无实际意义,int则是指针变量p所指对象的数据类型,因为前面定义的a是int类型,所以该处是int*(整型),在其他场景下可以是double*(双精度型)、char*(字符类型)、float*(单精度型),按照具体情况而定
  • &a:&为取地址操作符,&a则是取出a的地址
  • int* p=&a;:这一步是取出a的地址(对应&a),并赋给指针变量p,如果此时打印指针变量p那么输出的结果就是a的地址(即第7、8行代码,输出结果第1、2行),如果要打印a的地址要么printf("%p\n", p);要么printf("%p\n", &a);但要注意一个有&一个没有&,p前面没有&是因为指针变量p指代的就是&a
  • *p=10;:此处的*是解引用操作符,目的是间接访问p的地址即a,并将a的大小改成10,再强调一下此处的*与int*中的“*”的意义不同,前者是解引用操作符,后者是一种语法形式,无实际意义

二.结构体(struct)

1.什么是结构体

在前面我们了解了整型(int)、浮点型(float、double)、字符型(char),但这些仅能表示数字和字符,如果我们要表示一个人、一本书呢?一个人由姓名、年龄、性别、工作……组成,单单依靠int这些数据类型是无法表示的,因此我们引入了结构体这一数据类型用来表示复杂的事物

2.例析

#include
struct people
{
char name[20];
int age;
char work[20];
double time;
};
int main()
{
struct people p1={"张三",2022,"法外狂徒",2022.827};
printf("姓名:%s\n",p1.name);
printf("年龄:%d\n",p1.age);
printf("工作:%s\n",p1.work);
printf("作案积累时长:%f\n",p1.time);
return 0;
}

输出结果

【C语言跬步积累】——解引用操作符(*)、取地址操作符(&)复习、结构体(struct)、单精度型和双精度型的区别_第2张图片

 3.详解

(1)语法

#include

struct 复杂对象(例中为people)

{

数据类型(例中为int、char……) 对象信息1(例中为name、age……);

数据类型 对象信息2;

……

};(千万要记得加上“;”这是固定语法)

int main()

{

struct 复杂对象 结构体变量1(例中为p1,这是利用结构体类型来创建一个该类型的结构体变量)={输入对象的具体信息,与上面的顺序一一对应};

printf(" ",结构体变量1.对象信息1);

printf(" ",结构体变量1.对象信息2);

……

return 0;

}

(2)分析

【C语言跬步积累】——解引用操作符(*)、取地址操作符(&)复习、结构体(struct)、单精度型和双精度型的区别_第3张图片

 这一步我们仅仅是创建好了一个“外壳”,有点类似于下载软件前需要配置环境,也可以理解为创建了一个新的类型结构,之后我们需要描述一个人时便可以借用这个“外壳”

【C语言跬步积累】——解引用操作符(*)、取地址操作符(&)复习、结构体(struct)、单精度型和双精度型的区别_第4张图片

 struct people p1={"张三",2022,"法外狂徒",2022.827};便是创建了一个结构体变量p1,也就是我们创建的第一个“人”,在{ }内按照前面struct中我们定义的一些变量(如name,age……)对应填写相关信息。

之后便是使用printf进行打印,一般使用printf打印是这样的:printf("a的值:%d\n",a);,而在结构体中是需要用到一个操作符:“.”该操作符是用来找到people当中对应的变量(age、name……),因为p1中有很多成员:name、age……而我们只需要打印name,那么我们只需要在p1后加上.name就行了:printf("姓名:%s\n",p1.name);这样我们就可以打印出name对应的信息了,即张三。

4.补充:float和double之间的区别

  1. float是单精度类型,double是双精度类型。说人话就是double比float精度更高。(float的精度是6位小数,double是15位小数)
  2. float储存大小是4个字节,double是8个字节。
  3. 第一点说到的精度是他们的最大保留位数,你可以人为指定保留到第几位,但不能超过这个范围,超过的地方便会取近似值。
  4. 如果没有人为规定取几位小数,系统会默认保留6位小数。也就是说即使你使用的是double,最后也会和float一样,是一个6位小数(见图1、图2)
  5. 但一般情况不人为指定时,就会取可靠保留,可靠保留的位数比最大保留位数要小,例如float的最大保留是6,而可靠保留则是小于6(见图1中只有小数点后四位相同,后面的都是近似值,但不一定是保留4位,而是从该数字第一个数开始到第八个数结束,这八个数是精确保留,后面的则是取近似值)(见图3,图4),因为double的最大保留较大,所以可靠保留也较大,使用double时小数点后6位都可以准确保留
【C语言跬步积累】——解引用操作符(*)、取地址操作符(&)复习、结构体(struct)、单精度型和双精度型的区别_第5张图片 图1

 

【C语言跬步积累】——解引用操作符(*)、取地址操作符(&)复习、结构体(struct)、单精度型和双精度型的区别_第6张图片 图2

 

【C语言跬步积累】——解引用操作符(*)、取地址操作符(&)复习、结构体(struct)、单精度型和双精度型的区别_第7张图片 图3

 

【C语言跬步积累】——解引用操作符(*)、取地址操作符(&)复习、结构体(struct)、单精度型和双精度型的区别_第8张图片 图4

最后: 

作者不善言辞,很多地方表达不是很准确,希望大家指正!如果有不理解的地方可以私信,我会一一答复。

如果文字我解释的不是很清楚,大家可以结合图片和例析^_^

看完后记得自己动手敲一敲^_^

你可能感兴趣的:(c语言跬步积累,c语言,c++,学习)