Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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++;程序_C++_C_Arrays_Pointers_Multidimensional Array - Fatal编程技术网

C++ 解释以下C++;程序

C++ 解释以下C++;程序,c++,c,arrays,pointers,multidimensional-array,C++,C,Arrays,Pointers,Multidimensional Array,帮助我理解代码 解释一下数组*p[]中包含的内容。 数组不应该是A的所有元素的地址吗。 解释printf语句输出 main( ) { static int a[ ] = {0,1,2,3,4}; int *p[ ] = {a,a+1,a+2,a+3,a+4}; int **ptr = p; ptr++; printf(" %d %d %d\n", ptr-p, *ptr-a, **ptr); *ptr++; printf("

帮助我理解代码 解释一下数组*p[]中包含的内容。 数组不应该是A的所有元素的地址吗。 解释printf语句输出

main( )
{
    static int  a[ ]   = {0,1,2,3,4};
    int  *p[ ] = {a,a+1,a+2,a+3,a+4};
    int  **ptr =  p;
    ptr++;
    printf(" %d  %d  %d\n", ptr-p, *ptr-a, **ptr);
    *ptr++;
    printf(" %d  %d  %d\n", ptr-p, *ptr-a, **ptr);
    *++ptr;
    printf(" %d  %d  %d\n", ptr-p, *ptr-a, **ptr);
    ++*ptr;
    printf(" %d  %d  %d\n", ptr-p, *ptr-a, **ptr);
}
输出:

1 1 1 
2 2 2 
3 3 3 
3 4 4 

您有一个int数组、int*数组和int**

现在,检查
ptr-p
就是检查where-ptr点和where-p点之间的区别(两者之间有多少int块)
*ptr-a
检查*ptr(指针本身)指向的地址与a指向的地址之间的差异,最后
**ptr
检查
*p
指向的位置中的数组值

由于您这样移动指针:
*++ptr、*ptr++、ptr++
,因此指针指向更远的位置,因此输出会增长


最后一个增量
++*ptr
作用于
p
的值,而不是
ptr
的值,因此
ptr-p
保持不变

你是在问为什么第四行的第一项有
3
吗?我认为你没有正确复制程序。C++不允许卷绕字符串,它们应该是ASCII双引号。你需要问一个更具体的问题,所以我们知道你不理解的哪一部分。你知道printf的功能吗?您了解
%d
格式的含义吗?你知道数组初始化是如何工作的吗?@WeatherVane我想她会问回车是如何返回到输出的请解释到ptr-p、*ptr-a、**ptr和其他打印语句的输出是如何来的?第一个打印语句中**ptr=1是如何执行的?ptr++执行后,ptr指向(ptr+1),即a+1,p指向a,所以a+1减去a地址的地址是1*sizeof(int),因为ptr是int*它打印1*ptr包含基址*p[]。当ptr递增时,它包含p的第一个元素的地址,即地址1。“a”包含数组a[]的基址所以当数组的第一个元素的地址-数组输出的基址应该是1*sizeof(int)。在我的编译器中int的大小是4。为什么答案是1,那么在printf(“%d”,*ptr-a)中,sizeof(int)是4,但是编译器看到的是通过检查一个int指针与另一个int指针的不同程度来检查。如果计算字节数,则得到4个字节,但由于编译器知道类型为int,因此会将其转换为“pointee类型的实例数是多少?”类型为int,数字为1Thanks,我理解。请解释+++*ptr是如何工作的。请解释