认识C++《共、枚、指1》

简介: 认识C++《共、枚、指1》

前言:


 指针内容比较多,还需要再出一篇。久等了!!我看了我的创作记录,居然有两天没写博客,顿时就毛了,其实有点原因就是因为学校有作业,我又不想写,然后又在影响着我的心情,因为有算平时分嘛,然后一天下来,效率低的离谱,哭死。好了,话不多说,开学!


1.共用体的基本知识

 共用体也叫联合体,使用关键字union。说到这个你可以联想起结构体的关键字是struct,它们都是复合类型,用关键字来创建一种类型。



 共用体是什么呢?听名字,共用是共同使用一块内存空间的意思。我们这里使用struct创建了结构体,结构成员里有union创建的共用体。



 假如一个共用体的成员是一个double变量和一个int变量,它们的起始地址是同一块地方。



 我们需要知道的一点是,使用共用体在一定时间内只能表示一个成员。id_val有时是长整型,有时是字符数组。因为有空间是重叠的,当id_val.id_num使用整型的时候,把id_num的值改了,in_char[20]成员的值也会发生改变,从内存上看就是这样子的。


 但是我们不妨可以展望一下,当我们把量子应用到计算机里的时候,能不能实现共用体成员同时存在且正常使用互不干扰呢?maybe~


2.匿名共用体


  匿名共用体和匿名结构体也是非常相似的,没有了名称,也就不能用来创建相应类型的变量,除非在声明的时候就创建变量。


 补充:对于底层开发多数用的是C和C++语言。什么是底层呢?请看图



3.枚举

 枚举是一一列举的意思,生活中,有很多东西是可以完全列举出来的,比如性别,三原色,四大名山等等,在计算机中,使用枚举来表示,当然枚举的作用主要是用在switch语句中的case的标签入口。



 枚举的关键字是enum,和结构、共用都很像,用关键字创建一个名称,这个名称可以用来创建相应类型的变量。在C语言中我们在创建枚举量如Red、Blue、Yellow的时候,不是在一行上,而是分几行,其实都可以的。需要与结构、共用区分的是,枚举在列枚举量的时候,是用逗号分隔开的,不是分号。


3.1设置枚举值


   需要知道的是,后一个枚举量的值,一定是前一个枚举值+1。但是我们给前后两个枚举量都显性设值除外。


3.2枚举的应用场景


  在C++早期版本,只能将int值(或提升为int的值比如char、short)赋给枚举量。但这种限制取消了,现在可以使用long甚至long long类型的值,但不能是浮点数。


3.3枚举变量的取值范围


 ok,到这里,我们就讲完共用体和枚举了,重头戏来啦,认识指针。


4.地址和自由存储空间

 在了解指针之前,需要了解计算机的内存相应的知识。我们知道,在存储数据的时候,需要空间把数据存起来,这些空间就是一个个内存单元,每个大小是1个字节,有地址线给内存单元编号,这个编号就是内存单元的地址,在计算机中独一无二。



  我们在main函数里是先写int a;再写double b;我们看到内存编号,b的地址比a的地址低,以前我们可能会认为,谁先执行,谁先创建,放在低地址的应该是a变量,紧接的就存b变量,从这个我们可以看出:b不仅是存在低地址的,而且它们变量a和变量b还不紧邻(b的地址54,a的地址64相差了16),在不同系统中,存法是不一样的---自由的存储空间。地址是由十六进制表示的!


5.指针的思想


  指针实质上就是地址。从表面上来看 int* p_data = &data; int* 表示类型,把data变量的地址初始化给p_data指针,p_data与&data没有无异。指针变量是用来存放地址的。


 补充:使用常规变量的时候,值是指定的量,int a = 5;5是a指定的值,说a就是在说5,而&a是派生量。处理指针变量的时候是相反的,int* pa = &a;pa指定的值是a的地址也就是&a,用*(解引用)对pa解引用得到的是a的值,也就是*pa等于5。



  两者是相互的,a是值,&a变地址,pa是地址,*pa变值。


6.指针的声明和初始化


指针类型的意义

指针类型

指针类型的作用

int*

决定了访问多大的空间和怎么取数值

int*

在指针运算的时候,决定跳过多少个内存单元


 简单来说就是,什么样的官,权利就是什么样的,可不敢越界了。主要与同层的人交流,每次交流的时候,差不多都是同类型的人。意即:int*只能访问四个字节的空间,加一个值的时候,就跳过一个整型的空间大小,*int访问的还是一个整型空间。


 指针的内容真的很多,终于有时间更新了,虽然内容不是很多,也是博主 挤时间出来写的,


 如果你觉得不错的话,可以点点赞!你的支持是我更新的动力


 希望你读完有所收获!!!

相关文章
|
4月前
|
算法 测试技术
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
|
3月前
|
机器学习/深度学习 人工智能
【洛谷 P1028】[NOIP2001 普及组] 数的计算 题解(递推)
在NOIP2001普及组的数的计算题目中,给定自然数`n`,需构造遵循特定规则的合法数列。合法序列始于`n`,新元素不超过前一项的一半。任务是找出所有这样的数列数量。例如,当`n=6`时,合法序列包括`6`, `6,1`, `6,2`, `6,3`, `6,2,1`, `6,3,1`。程序通过动态规划求解,当`i`为奇数时,`a[i] = a[i - 1]`;为偶数时,`a[i] = a[i - 1] + a[i / 2]`。代码中预处理数组`a`并输出`a[n]`作为答案。输入`n`后,程序直接计算并打印合法数列个数。
38 0
|
3月前
【洛谷 P1035】[NOIP2002 普及组] 级数求和 题解(循环)
**NOIP2002普及组题目:求级数$S_n=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}$超过$k$的最小$n$。给定$1\leq k\leq 15$,输出满足$S_n>k$的$n$。输入$1$个整数$k$,输出相应$n$。例如,输入$1$,输出$2$。代码中使用double确保精度,通过累加求和判断条件找到$n$。**
24 0
|
3月前
|
机器学习/深度学习 存储
【洛谷 P1028】[NOIP2001 普及组] 数的计算 题解(递归)
**NOIP2001普及组数的计算**:给定自然数\( n \),构造数列,新数不超过序列最后一项一半。求合法数列个数。输入\( n \)(\(1 \leq n \leq 10^3\))。样例:输入6,输出6。递归解决,代码中定义函数`f`实现递归计算,总和存储在`cnt`中,最后输出。
33 0
|
4月前
|
算法 测试技术 C++
【状态压缩 容斥原理 组合数学】3116. 单面值组合的第 K 小金额
【状态压缩 容斥原理 组合数学】3116. 单面值组合的第 K 小金额
【状态压缩 容斥原理 组合数学】3116. 单面值组合的第 K 小金额
|
4月前
|
算法 C语言
(“拨”取数字的典例:N位水仙花数判断及水仙花数变种)
这篇内容介绍了如何判断和生成水仙花数,水仙花数是一个n位数,其各位数字的n次方之和等于该数本身。文章首先回顾了"拨数"的概念,然后通过实例展示了如何判断三位水仙花数,并将其推广到任意位数的水仙花数。作者提供了详细的解题思路和代码示例,强调了解决这类问题时要慢下来,分步骤分析问题。最后,文章还探讨了一个水仙花数的变种问题,即数字拆分后乘积之和等于原数的情况。
72 0
|
11月前
|
算法
【算法挨揍日记】day06——1004. 最大连续1的个数 III、1658. 将 x 减到 0 的最小操作数
1004. 最大连续1的个数 III 题目描述: 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
397 1
|
存储 机器学习/深度学习 人工智能
【Python 百练成钢】DNA、蛇形矩阵、Huffuman树、K-进制数、K倍区间、交换瓶子、第几个幸运数、四平方和、The 3n + 1 problem、大数乘法
【Python 百练成钢】DNA、蛇形矩阵、Huffuman树、K-进制数、K倍区间、交换瓶子、第几个幸运数、四平方和、The 3n + 1 problem、大数乘法
277 0
【Python 百练成钢】DNA、蛇形矩阵、Huffuman树、K-进制数、K倍区间、交换瓶子、第几个幸运数、四平方和、The 3n + 1 problem、大数乘法
|
算法 C语言
假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。
(2)当n为奇数时,将前后两部分,即1…n,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;若两端重量相等,则中间的硬币,即第 (n+1)/2枚硬币是假币。n,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。:因为30位偶数,所以至少要被分一次,然后成为奇数之后,那个假币就是奇数的中位数,所以只需要2次。若输入的硬币数为30,则最少的比较次数为(2),最多的比价次数为(4)。
492 0
Day34——K次取反后最大化的数组和、加油站、分发糖果
Day34——K次取反后最大化的数组和、加油站、分发糖果
80 0