先决条件: 指针 假设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