数据类型:浮点型和数据

数据类型:浮点型和数组trick

一、综述

​ 整型变量的存储和实现机制已经在补码中介绍,本篇主要介绍浮点类型的内存存储格式。以及一些乱七八糟的东西。

二、 浮点型 的内存实现

​ IEEE 754标准下,由尾数(mantissa),指数(exponent)和符号位(sign)三部分组成,后续更具体的稍后施工

三、数组的巧妙初始化

​ C++的数组可以通过列表的方式进行赋值,而对于诸如动态数组这样的数据结构,我们有着一些非常简便的语法进行实现。这里进行一些汇总。

#include <iostream>
#include <string>
using namespace std;

int main(){
	int *pa = new int[10];				//10个未初始化的int ,pa指向第一个int元素
	int *pa2 = new int[10]();			//10个值初始化为0的int
	int *pa3 = new int[10]{0,1,2,3,4,5,6,7,8,9};	//使用初始化器初始化 
	
	string *spa = new string[10];		//10个空string 
	string *spa2 = new string[10]();	//10个空string
	string *spa3 = new string[10]{"a","b","c",string(3,'x')};	//前四个使用初始化器初始化,后面的就默认进行值初始化 
	//关于string 在STL库中有着更加详尽的介绍
	return 0;
}

​ 这里需要着重注意的是我们的动态数组赋值和静态数组初始化的区别和联系,以及一个函数 memset()的使用。

1、静态一维数组

int a[10]{0};		//语句1
int a[10]{1};		//语句2
int a[10]{2,1};		//语句3
  • 针对语句1,我们非常熟悉,其实就是单纯的把数组全部赋值为0,但是其内部实现是很有意思的。

    • 当我们使用 { } 进行数组的赋值,会调用C++ 内部的一个构造函数,括号内元素对于数组a进行赋值,假设 {元素个数}

      少于 a.size() C++ 会使用缺省值0进行 初始化。也就是说,第一个元素用户定义成0,其他的元素被默认赋值成为0.

  • 针对语句2,在上一点中我们已经谈到了,所以第一个元素会被赋值成为1,但是其他的元素只会被默认成为零。是没有办法达到全部赋值成为1的效果的。

  • 同理,int a[10]{2,1} 的结果我们可以预测,为 2,1,0,...,0

2、动态数组

​ 由于使用 new 函数进行分配空间,所以大多时候,我们有着另外的一个办法,memset() 函数进行实现,但是memset() 大多数时候也只是在很大的数据进行清零的时候比较方便而已,但是下述代码有时候很方便。

int *a = new int[10] ();  // 每个元素初始化为0,括号内不能写其他值,只能初始化为0

3、memset()函数的使用

​ 参数:

void *memset(void *s , int ch , size_t n)
/*
	具体含义的解释:void* 是一个指向内存区的指针。这块内存就是我们进行操作的对象,c 会以 int 值的形式传递,但其实传递的是一个替代字符 ch。n 表示我们将要修改前几个字节的字符。
*/

​ 实例:

char a[10];
memset(a,'s',9);
======= Output ======
  s s s s s s s s s 
posted @ 2020-12-01 19:53  关河梦断  阅读(237)  评论(0)    收藏  举报