C++ 指针地址之间的差异
我正在使用指针算法测试一些代码,但我不知道我得到的大小是什么格式。 我假设C++ 指针地址之间的差异,c++,visual-studio-2008,64-bit,sizeof,stdvector,C++,Visual Studio 2008,64 Bit,Sizeof,Stdvector,我正在使用指针算法测试一些代码,但我不知道我得到的大小是什么格式。 我假设sizeof给我以机器字为单位的大小(字符大小==1个机器字),但是返回的指针地址之间的差异是以什么单位表示的 我正在使用VS2008和x64 win7和x64编译器 void test_pointer_delta() { int sum=0; int n= 100000; for(int i=0;i<n;++i) { char* p1= new char;
sizeof
给我以机器字为单位的大小(字符大小==1个机器字),但是返回的指针地址之间的差异是以什么单位表示的
我正在使用VS2008和x64 win7和x64编译器
void test_pointer_delta()
{
int sum=0;
int n= 100000;
for(int i=0;i<n;++i)
{
char* p1= new char;
char* p2= new char;
sum += p2-p1;
}
double dp= (double)sum/n; //~64
int sz= sizeof(char);//1
int p_sz= sizeof(char*);//8
printf("diff: %f \n",dp);
}
无效测试\u指针\u增量()
{
整数和=0;
int n=100000;
对于(int i=0;i减去两个指针的结果的类型是:。两个指针的差的单位是T元素的数量。减去两个指针的结果的类型是:。两个指针的差的单位是T元素的数量。减去两个指针的结果的类型是:。两个poi的差的单位是nter T*是T元素的数量。减去两个指针的结果类型是:。两个指针T*的差的单位是T元素的数量。我认为如果您尝试此代码,您将得到您的答案:
char s[10];
char *p1 = &s[0];
char *p2 = &s[1];
std::cout << p2 - p1;
chars[10];
char*p1=&s[0];
char*p2=&s[1];
std::cout我认为如果您尝试此代码,您将得到您的答案:
char s[10];
char *p1 = &s[0];
char *p2 = &s[1];
std::cout << p2 - p1;
chars[10];
char*p1=&s[0];
char*p2=&s[1];
std::cout我认为如果您尝试此代码,您将得到您的答案:
char s[10];
char *p1 = &s[0];
char *p2 = &s[1];
std::cout << p2 - p1;
chars[10];
char*p1=&s[0];
char*p2=&s[1];
std::cout我认为如果您尝试此代码,您将得到您的答案:
char s[10];
char *p1 = &s[0];
char *p2 = &s[1];
std::cout << p2 - p1;
chars[10];
char*p1=&s[0];
char*p2=&s[1];
std::cout您的代码表现出未定义的行为。只有当两个指针都指向同一数组时,减去两个指针才有意义(在这种情况下,差值是它们之间的距离,即数组元素的数量).new
的结果是不可预测的。sum
可以是任何东西。代码显示未定义的行为。只有当两个指针都指向同一数组时(在这种情况下,差值是它们之间的距离,以数组元素数计),减去两个指针才有意义.new
的结果是不可预测的。sum
可以是任何东西。代码显示未定义的行为。只有当两个指针都指向同一数组时(在这种情况下,差值是它们之间的距离,以数组元素数计),减去两个指针才有意义.new
的结果是不可预测的。sum
可以是任何东西。代码显示未定义的行为。只有当两个指针都指向同一数组时(在这种情况下,差值是它们之间的距离,以数组元素数计),减去两个指针才有意义。新建的结果是不可预测的。sum
可以是任何内容。