C/C++指针拼图

先决条件: 指针 假设int的大小=4字节,指针变量的大小=8字节,接下来的程序的输出是什么。 关于如何解决它的一些提示:

null
  • int的大小=4字节,指针变量的大小=8字节(在我的机器上),在指针上加1会使指针指向下一个立即数类型
  • a的类型为int(*)[5][6]
  • a1为int*型,a2为int**型,a3为int型**
  • &a1为int**,a2为int***,a3为int****。因为所有的指针都指向一个指针,所以加1意味着加8个字节(指针的大小)
  • [0][0][0]是int类型,[0][0][0]是int*类型,[0][0]是int*类型,[0][0]是int(*)类型[6],[0]是int(*)类型[6],[0]是int(*)类型[5][6],[0]是int(*)类型[5][6],[1]是int(*)类型[4][5][6]

// CPP program to illustrate concept
// of pointers
#include <stdio.h>
int main()
{
int a[4][5][6];
int x = 0;
int * a1 = &x;
int ** a2 = &a1;
int *** a3 = &a2;
printf ( "%d %d %d %d" , sizeof (a), sizeof (a1), sizeof (a2), sizeof (a3));
printf ( "%d " , ( char *)(&a1 + 1) - ( char *)&a1);
printf ( "%d " , ( char *)(&a2 + 1) - ( char *)&a2);
printf ( "%d " , ( char *)(&a3 + 1) - ( char *)&a3);
printf ( "%d " , ( char *)(&a + 1) - ( char *)&a);
printf ( "%d " , ( char *)(a1 + 1) - ( char *)a1);
printf ( "%d " , ( char *)(a2 + 1) - ( char *)a2);
printf ( "%d " , ( char *)(a3 + 1) - ( char *)a3);
printf ( "%d " , ( char *)(a + 1) - ( char *)a);
printf ( "%d " , ( char *)(&a[0][0][0] + 1) - ( char *)&a[0][0][0]);
printf ( "%d " , ( char *)(&a[0][0] + 1) - ( char *)&a[0][0]);
printf ( "%d " , ( char *)(&a[0] + 1) - ( char *)&a[0]);
printf ( "%d " , ( char *)(&a + 1) - ( char *)&a);
printf ( "%d " , (a[0][0][0] + 1) - a[0][0][0]);
printf ( "%d " , ( char *)(a[0][0] + 1) - ( char *)a[0][0]);
printf ( "%d " , ( char *)(a[0] + 1) - ( char *)a[0]);
printf ( "%d " , ( char *)(a + 1) - ( char *)a);
}


输出:

480 8 8 8
8 8 8 480
4 8 8 120
4 24 120 480
1 4 24 120

相关文章:

本文由 Subham Jain .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享