Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指针地址之间的差异_C++_Visual Studio 2008_64 Bit_Sizeof_Stdvector - Fatal编程技术网

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
可以是任何内容。