用c++编写的涉及指针的程序
A program in C++ involving pointers
我看不懂这个程序的输出:
void main(){
double d=3.1416;
char ch=*(char*)&d;
cout<<ch;
}
输出:2
注:2的尺寸比通常的2小得多。
你能解释一下第三行的意思吗?谢谢你。在你的语句中:
char ch=*(char*)&d;
您正在执行以下操作:
1. 获取变量的地址或位置。
2. 创建一个字符类型的指针指向变量。
3.解引用(将变量的第一个位置转换为字符类型)(尚未发生转换)。
4. 将d
的第一个内存位置分配给字符类型变量(尚未进行转换)。
然后打印ch
中的值。
如果ch
中的值是可打印的值,那么您很幸运;然而,我怀疑它是否有意义。否则,你就看不见了。
如果要从内部表示转换为文本表示,请使用:
cout << d;
我强烈建议在此代码上使用调试器并查看变量d
的内存位置。获取该值并查看其是否可打印。
编辑1:
第4行打印的值取决于值3.1416
在内存中的存储方式。
因为它是一个浮点变量,我们可以猜到它被分为:符号、尾数和指数。最大的问题是,有多少比特是专门用于这三个群体的。通常,1位是符号。其他的依赖于你的平台。如果您的平台上的char
类型是8位,并且顺序是尾数,指数,然后是符号,那么您的字符将是尾数的前8位,这可能不是可打印的字符。
相关文章:
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 如果我删除指针,我的C++程序会意外删除系统文件吗?
- 为什么从 constexpr 引用生成的程序集代码与从 constexpr 指针生成的程序集代码不同?
- 在C++中的程序之间共享指针
- 使用唯一指针调用函数会使我的程序崩溃
- 指针和程序性能之间有什么关系吗?
- 使用终止程序的指针在数组中输入字符串
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 类指针方法崩溃程序
- 找不到如何创建使用指针、字符和 for 函数组合的程序
- LLDB 格式化程序摘要提供程序和模板智能指针的语法子项
- 当程序从该函数调谐器时,指向在函数中声明和定义的某些 C 字符串的指针不再有效.为什么?
- 从 GetProcAddress 获取的函数指针在使用 stdlib 时会使程序崩溃
- C 指针设置为地址,但莫名其妙地指出了程序的不同部分中的不同值
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- C++简单指针程序
- 字符双指针程序中的访问冲突
- 智能指针——程序终止时的分段错误
- 我如何得到句子反转使用指针程序停止打印出乱码