C/C++易错点

c++易错点总结 c++易错点的话还挺多 1.关于调用拷贝构造函数 (1)使用一个已经创建完毕的对象初始化一个新的对像 p1(p2) (2)值传递的方式给函数参数传值 #include<iostream> using namespace std; class A{ public: A(int c) { a=c; } A(A &p) ... 阅读详情

1、浮点数的转换
#include <iostream>
using namespace std;

int main(void)
{
        float a = 1.0f;
        cout<<(int)a<<endl;
        cout<<&a<<endl;
        cout<<hex<<(int&)a<<endl;
        cout<<boolalpha<<((int)a == (int&)a)<<endl;
        cout<<"----------"<<endl;
        float b = 0.0f;
        cout<<(int)b<<endl;
        cout<<&b<<endl;
        cout<<hex<<(int&)b<<endl;
        cout<<boolalpha<<((int)b == (int &)b)<<endl;
        return 0;
}
输出为:
1
0x7fff5fbffa9c
3f800000
false
----------
0
0x7fff5fbffa98
0
true
难点解释:浮点数转化为整数时,是取整,而化为整数引用时 (int&)a 相当于 *(int*)&a。 所以 float a=1.0f; (int)a 和 (int&)a 是不同的,1.0f在内存中是 3F800000,
3f800000H=0 01111111 00000000000000000000000B (注意我分成了三段)
符点型数据在X86机上占四个字节,其存储按IEEE754标准实现,即:

1位的符号位s 0(代表正数,1代表负数)

8位的指数位e(移码表示)01111111是0的移码

23位的小数位f 0000000000000000000000 表示小数部分为0

因此,作为int看待的话是1065353216,所以(int)a等于1,(int&)a等于1065353216。 而之所以当b=0.0f时,(int)b 和 (int&)b 相等,是因为0.0f和0的内存布局正好一致,都是 00000000。


2、sizeof(struct A);以结构体里面最长的数据元素为对齐单元,结构体的长度一定是最长的数据元素的整数倍,如果结构体内存在长度大于处理器的元素,那么就以处理器的位数为对齐单元。

3、空类的大小占一个字节

这里试图讨论为什么C++的结构体或类即使没有成员也需要一个字节的大小?
首先需要一个字节的作用在上个随笔中已经说明,是为了在生成实例的时候确定区别;但实际上在C里面是不支持空成员的结构体,直接报编译错误。
因此这是C++特有的特性,可能有如下的原因:
1.C++里面必须支持没有成员的类,比如纯虚类;这些类只有方法,没有数据成员(虽然会有虚表);但这些类不会被实例化。
2.为了达到统一,非纯虚类的C++结构体和类也会被C++支持,但他们需要实例化,所以需要提供一个字节来可以给他们分配内存。

而C里面是不支持没有成员的结构体(VC里面是编译不过的),其实完全没有必要支持这种无意义的定义,从而更简单。

从Blender到Three.js:自制3D角色模型Web预览完整指南 在数字内容创作中,3D建模与Web渲染是构建沉浸式体验的两大基石。设计师往往擅长在Blender中创作精细的角色模型,但如何将其高效呈现于浏览器端,却常因格式转换与渲染配置而受阻。GLB作为glTF的二进制封装格式,凭借其单文件、轻量级及对材质、动画的良好支持,成为Web 3D场景的事实标准。Three.js作为功能强大的WebGL库,能够无缝加载GLB模型,并借助轨道控制器实现拖拽旋转与缩放查看。本文从模型网格、材质贴图等基础原理出发,详解Blender导出GLB时的关键规范与坐标转换细节,并通过一个完整 阅读详情

相关推荐

C/C++ 时间戳转换避坑指南:时区处理与 `struct tm` 的5个易错点

本文详细解析了C/C++中时间戳转换的5个常见易错点,包括`struct tm`的偏移问题、`mktime`和`localtime`的时区行为差异、时区转换中的8小时陷阱等,帮助开发者避免在实际项目中踩坑。特别强调了时区处理和跨平台兼容性问题,并提供了完整的示例代码。

weixin_33713707的博客 299

C++ 入门教程学习

 01-Hello World 新建工程 // 03-Helloworld.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include &lt;iostream&gt; using namespace std; int main() { cout &lt;&lt; "Hello World" &lt;&lt; endl; //endl =...

什么风把您给吹来了 3301

c++期末复习易错点整理

本人总结,考试必背

c/c++易错点收集(持续更新)

收集了c,c++语言在学习和应用的时候一些易错点,加入了个人分析。仅供参考,有错误的地方请多多指出

cyhtiancai的博客 2556

c++ 类基本概念易错点

总结和演示了C++基本概念使用方法,指明常见易混淆和出错的地方。

NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()

Please use torch.nn.Module.to_empty() instead of torch.nn.Module.to()输出(llama) (base) [root@localhost home]# nvidia-smi Unable to determine the device handle for GPU0000:09:00.0: Unknown Error。这是典型的“孤儿进程”,但它还是。(僵尸进程),占用 GPU 资源。如果进程仍然不消失,并且。,这意味着它的父进程是。

m0_61636632的博客 2096

学习c++的一些易错点总结(自留)

在类外对其定义时函数头就是 void Point::setPoint(int x, int y) 这种形式。(1)在类内声明的形式为 void setPoint(int x, int y);类名::来判断是否是类的作用域,::之前不属于类的作用域,::之后属于类的作用域。(2)二维数组arr中,*arr代表一维数组,*(arr+1)代表下一行一维数组。(sizeof(arr) / sizeof(arr[0])得到数列个数)*ia和ia[0]是一样的,同理*(ia + 1)和ia[1]也一样的。

m0_72637173的博客 270

WRF替换静态地理数据中的土地利用数据(WRF替换下垫面数据)

   在进行自己的WRF项目模拟的时候,因为需要用中国土地利用数据替换WRF内嵌老旧的土地利用数据,故需要将土地利用进行替换。我使用的中国的土地利用数据是来自中国土地利用数据(1980-2015)。其中我以下载的lucc1980为例进行演示。 1、坐标转换    (1)下载的lucc1980数据如下图所示:    (2)在ArcMap中打开如下图所示: 打开属性表可以看到,lucc1980的坐标系为投影坐标系Krasovsky_1940_Albers,数据格式为GRID。这里需要将投影坐标系转换成地理坐

GIS 1万+

C++容易犯的九个陷阱(代码版本)

自己也算入行一年了,遇到不少坑,结合网上博客以及自己复现,总结有以下几个容易出错的点。

叶 1292

自锁电路设计

Hi,uu们,是不是经常要用到自锁电路,通常不是使用555芯片就是用比较器来做自锁,今天我们来简单看下自锁电路的设计.图1采用了比较器构建了一个自锁电路,采用低电平复位,当需要复位的时候志需要将反向端的二极管拉低一下即可,免去 三极管控制同相端和电源短接的麻烦。图1:比较器构建的自锁电路也可以使用555去构建,如下图2所示.图2:使用555构建的自锁电路工作原理见555的真值表,真值表如表1所示.表1:555电路真值表相对来说555还是比较贵,所以我就想能不能有个便宜的方法做个自锁电路,构建电路如下图3所示

weixin_43884675的博客 7064

数字蓝牙功放

数字蓝牙功放(TPA3110+BK8000L),基于D类数字功放芯片TPA3116蓝牙功放,HIFI级带滤波15Wx2蓝牙数字功放,支持有线和蓝牙两种音源输入

runweipa的博客 1419

c语言指针易错情况,C语言/C++从入门到精通之指针易错点总结

指针是C语言的灵魂,所以学好指针很关键,本篇主要介绍了C语言/C++从入门到精通之指针易错点总结,通过具体的内容向大家展现,希望对大家C语言/C++的学习有所帮助。学习C语言肯定会碰到指针,指针是C语言的灵魂。所以学好指针很关键,这里写一些指针方面的容易错的或者易混淆的知识点还有自己不会的盲点,以便之后复习时用。1、数组传参和数组形参1.1 数组传参如果函数遇到数组传参的,不论是什么形式的形参,只...

weixin_35907460的博客 513

契约锁代码审计分析

但是正常来讲,定义了这么多的路由,肯定会有一个通用的判断逻辑,来判断请求的url是否和这些路由匹配。POC中有一点值得注意,Spring新一些的版本中支持以表单的形式来为参数赋值,且无需用注解。但是需要注意4.2.8的代码逻辑和新版本中的不同,此漏洞可能存在于版本大于4.2.8的版本中。方法用于解析LICENSE,先进行AES解密,再从字符串转换成json格式的License。loadPath实际判断传入的path是否和下面的path相等,如果不相等返回null。,如果包含这三个中的一个就会抛出异常。

好记性不如烂笔头 5716

c语言数组易错点,C/C++入门易错点及常用小技巧

原标题:C/C++入门易错点及常用小技巧1. int型:绝对值在10^9范围内的整数都可以定义成int型。2.long long型:如果long long型赋值大于2^31 -1的初值,则需要在初值后面加上LL,否则会编译错误。3.float、double输入输出格式:使用printf("%f",c);语句时,%f是float和double型的输出格式。而在使用scanf输入时,float输入格式...

weixin_30359591的博客 776

从0开始图形学(光栅化)

从0开始图形学

A112459的专栏 2395

ubuntu 20.04 搭建多用户远程桌面共享及同时在线使用

摘要:本文介绍了在物理机上配置远程桌面访问的完整流程。通过setup_xrdp.sh脚本自动安装xrdp服务,修改配置文件并开放3389端口。同时提供了用户管理脚本:add_rdp_users.sh用于创建带sudo权限的远程用户,del_rdp_users.sh用于删除用户及主目录。还包含批量操作脚本add_rdp_all.sh和del_rdp_all.sh,支持一次性创建/删除多个用户(如dev1-dev5),所有用户密码统一设置为111111。完整方案实现了远程桌面环境的快速部署和用户集中管理。

622

C/C++入门易错点及常用小技巧

C++语言诞生至今已有30多个年头了,主要集中在需要运行效率比较高的行业,比如现在的游戏开发以及高效服务器等等。 C++学习难度比其它语言都要高,这是不可否认的,其学习难度主要在于它的复杂性,如何入门C++,想必很多人都头疼过。讲到入门,我们首先是掌握基础语法,C++的语法是和C语言的语法很相近。 今天小编讲讲C/C++入门易错点及常用小技巧 1. int型 :绝对值在10^...

weixin_45820912的博客 356

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C/C++易错点 总结

数组的定义与初始化 在数组定义时,如果没有显式提供元素初值,则数组元素会像普通变量一样初始化: 在函数体外定义的内置数组,其元素均初始化为0;  在函数体内定义的内置数组,其元素无初始化 不管数组在哪里定义,如果元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化. 字符串 char ca1[ ] = {‘C’, ‘+’,

我的E家 960

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C/C++易错点总结

char字符长度定义时,若过小,长的路径则容易崩溃 文件操作每个open,一定要对应fclose

u011489887的专栏 449

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C/C++程序设计易错点收集

在对全局变量的使用中一定注意在函数中不小心改变了不该改变的全局变量,造成不可挽回的后果。尾递归:尾递归的妙处在于递归后可以删去前一个函数的栈帧,从而降低程序的深度,因而可以节约空间。函数体的定义可以写在调用函数的语句,但是在调用之前要有声明,告诉编译器这个函数是实际存在的。此处的q指向一个一维数组,创建的动态数组即是一个充满指向一维数组的指针构成的数组。全局变量可以在程序的任意地方使用,注意如果定义在其他的源文件中则需要声明。首元素,第一行元素的首,整个数组的首有不同的含义。在不同的源文件注意即使声明。

2301_79733688的博客 429

2025-03-10 学习记录--C/C++-C语言 易错点 大总结

C语言 易错点 大总结

weixin_48850734的博客 837

编程学习 | C/C++入门易错点整理,来看看吧!

——返回局部变量的引用或者指针是错误的,返回值是正确的,因为它会返回一个副本; ——成员函数指针是强类型的,进行转换是需要显示转换,静态成员函数可以直接用普通函数指针来存取; ——静态成员函数不能使用virtual、const、volatile修饰,静态函数是类的不存在虚函数表所以不能是virtual的(其他两个不知道为什么); ——静态成员函数只能操作类变量,没有this指针; ——dynmaic_cast只支持指针和引用的类型转化,且做运行时类型检测,其他转化不会; ——sizeof的结果..

C语言C++学习俱乐部:765860056 295
上一篇: C++学习笔记(Thinking in C++)六
下一篇: Dalvik VM (DVM) 和Java VM (JVM)之间的区别
libaohan
博客等级 码龄19年 42粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值