使用指针的数据类型的大小
Size of data types using pointers?
我想看看我电脑上数据类型的大小。因此,我开始使用int数据类型,代码如下:
#include <iostream>
using namespace std;
int main()
{
int t, *tpntr1, *tpntr2;
tpntr1 = &t;
cout << "The first address: t" << tpntr1;
tpntr2 = ++tpntr1;
cout << "n The second address : t" << tpntr2;
unsigned int size= (tpntr2 - tpntr1);
cout << "n the size of int : t" << size<<"n";
return 0;
}
在visual studio中编译后,大小返回为0。在一个特定的运行中,第一个地址是0028FBA4,第二个地址是0028FBA8,但差值为零。谁能指出我哪里做错了吗?我猜这和十六进制到十进制的转换有关
提示:将cout
移到最后看看发生了什么:
#include <iostream>
using namespace std;
int main()
{
int t, *tpntr1, *tpntr2;
tpntr1 = &t;
tpntr2 = ++tpntr1;
unsigned int size= (tpntr2 - tpntr1);
cout << "The first address: t" << tpntr1;
cout << "n The second address : t" << tpntr2;
cout << "n the size of int : t" << size<<"n";
return 0;
}
地址相同。你实际上是把tpntr2
分配给tpntr1
。
如果您将tpntr2 = ++tpntr1
更改为
tpntr2 = tpntr1;
tpntr2++;
它将部分地做你想做的。注意,这将打印1
作为大小。我可能是错的,但指针算术考虑到类型的大小(有人请纠正我,如果这不是情况。我不能解释它)。
正如Carcigenicate指出的那样,您的主要问题是++修改了值。然而,由于指针运算的工作方式,您也可能无法得到您想要的结果。
正确的格式是:
tpntr1 = &t;
tpntr2 = tpntr1;
tpntr2++;
但是,结果将是1,因为tpntr2 - tpntr1
将返回int数的差值。因为int值是4字节(至少在我的实现中是4字节),所以即使内存地址间隔为4,也会打印出差异为1。
如果你想要实际的字节数(应该是4),你需要转换为一个可以绕过这种行为的类型。您有两种选择:将指针强制转换为int型,这将使其成为对数字的简单数学操作,或者reinterpret_cast<char*>
,这将告诉它将指针视为指向一个字节的内存。例如,这将显示大小为4:
int main()
{
int t, *tpntr1, *tpntr2;
tpntr1 = &t;
tpntr2 = tpntr1;
tpntr2++;
unsigned int size= (reinterpret_cast<char*>(tpntr2) - reinterpret_cast<char*>(tpntr1));
cout << "The first address: t" << tpntr1;
cout << "n The second address : t" << tpntr2;
cout << "n the size of int : t" << size<<"n";
return 0;
}
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 尝试了解C++指针和数据类型初始化
- 指针数据类型变量如何包含对象?
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 指向数据类型的指针的类模板推导
- 如何在C 中使用不同数据类型的类模板指针声明指针
- 具有不同数据类型或参数的不同函数的函数指针
- 以其数据类型作为参数以指针
- 将原始数据类型转换为空隙指针类型
- C++指针给出数据类型为"int"的错误,但与"char"一起工作正常
- 如何正确地对数据开始指针进行类型转换(这是一种很好的做法吗)
- 具有指针数据类型的非类型函数模板参数
- C++指向函数作为参数的指针.数据类型不兼容
- 指向指针的指针(C/C++)中的数据类型声明意义
- 将数组变量分配给 C++ 中相同数据类型的指针
- 为什么我们需要不同的数据类型来表示指针
- 为什么指针声明中需要数据类型
- 数据类型指针使用*(Datatype *)
- C /c++数据类型,通过指针实现最快的可移植访问