C++ 解释以下C++;程序
帮助我理解代码 解释一下数组*p[]中包含的内容。 数组不应该是A的所有元素的地址吗。 解释printf语句输出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("
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是如何工作的。请解释