IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 21_09_25 C语言杂谈 -> 正文阅读

[C++知识库]21_09_25 C语言杂谈

类型

c语言中规定类型这样一个事情,主要是出于一个怎样的原因呢?

char        

short        

int 
       
long        

long long

float

double

常规主要的类型,就是上面的几种类型

char? ????????类型常用于存储字符数据,数据宽度为8bit,唉?一个英文字符也是八个bit位就能存下,好像他这个设计很合理啊,但是呢,其实我们深究一下,他是不合理的,为啥呢,主要从两方面来说明问题,在32位的pc机前提下讨论。

1.你使用char类型在进行参数传递的时候,它实际还是按4字节传递的,最主要的原因是为了适应本机宽度的问题

2.对齐问题,我们所讨论的对齐,都是要基于硬件的,硬件不支持的话一切都是扯,那么char类型的对齐方式是按1字节对齐的,好像计算机也是最小访问一字节哈,但是问题就出在这里,cpu的最小对齐单位是word,也就是双字,那就意味着,一字节的对齐方式,只是cpu为我们做了适当的处理

当然,要出也是有的,就旦旦只是节省内存,经此而已。

float 也会默认转成 double 主要原因,一个是精度,一个是本机宽度

其他的几个类型,就不再赘述了,相信你已经悟到了!

符号问题

c语言中有有符号无符号的这种说法,好像对于我们的认知来说数确实是有正负的问题哈,很合理哈,但是问题就出在这里了,计算机怎么知道你是有符号还是无符号??计算机做加减法都仅仅只是做与或非操作而已,它并不能判断你的数究竟有无符号,0xFFFFFFFF你能说他是正数还是负数??0xFFFFFFFF 与0x12345678你能直接说他谁大谁小??这都是无法确定的,因为我无法确定你是把高位当符号位看还是不当符号位看,同样计算机也是无法确定,那么在cpu的角度来说,0xFFFFFFFF -?0x12345678究竟结果是正是负?无法确定,所以cpu把他即当无符号数也当有符号数,按无符号数的运算结果设置CF位,按有符号数的结果设置OF位,这下应该清楚为啥会有符号的说法了吧,其目的就是要让编译器能够准确无误的选择是使用根据OF位的进行操作的汇编指令,还是选择是使用根据CF位的进行操作的汇编指令,总结,c语言的符号设计是让程序员显示指导,消除歧义。

类型强转

他这个设计又是为了什么呢??说白了就是为了确定两个事情,一个就是转换数据宽度,一个就是转换步长,转换数据宽度就不再赘述了,转换步长

int *A;
int *B;
int *C;

现在又三个指针变量,那么他们现在的步长都是4个字节,现在我想让他每次的步长是两个字节,那么可以把他转换成 short* 类型,或者转换从(char (*)[2])类型,都是可以的,这个就是强转的意义

数组和指针

char * szp = “ABCDEF”;
char szArr[] = "Hello World";

好像他俩没啥区别嚯,

char * szp = “ABCDEF”;
char szArr[] = "Hello World";


//好像指针也可以通过数组的形式访问

szp[i];

//好像数组也可以通过指针的形式访问

*(szArr + i);

这事怕也也干的多了,好像也没啥问题,多级指针和多维数组好像也没有问题哈,确实一维数组和一级指针在这样的两种访问方式下确实是等价的,但是问题就出现在了多维数组和多级指针上

int***p;

//用数组访问

p[i][j][k];

----------------------

int Arr[i][j][k];

//用指针的形式访问

*(*(*(Arr + m) +n) + v);

好像是我们平时这么使用是没啥问题哈,但是其实是他的本质已经发生变化了,事先说明一下。多维数组本质上和一维数组没区别,他的维数仅仅只是作为比例因子和偏移,拿来计算地址偏移用的,但是多级指针用数组访问的时候,他的维数仅仅只做偏移用,他的过程是加偏移,解引用,加偏移,解引用。。。。而数组以指针方式访问的时候,他的本质其实还是比例因子加偏移,他的 * 取值操作符,压根就没有取值,仅仅只是给你看看,让你比如那么慌,让你更好理解你所访问的值是哪个,仅此而已。

本人水平有限,有错的地方希望各位大佬指正;

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 09:58:18  更:2021-09-26 09:58:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:30:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码