📜  AC / C++指针难题

📅  最后修改于: 2021-05-26 01:06:13             🧑  作者: Mango

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

  • int的大小= 4字节,指针变量的大小= 8字节(在我的机器上),将指针加1会使指针指向其下一个立即类型
  • a的类型为int(*)[5] [6]
  • a1是int *类型的,a2是int **类型的,a3是int **类型的
  • &a1的类型为int **,&a2的类型为int ***,&a3的类型为int ****。由于所有都指向一个指针,因此加1意味着增加8个字节(一个指针的大小)
  • a [0] [0] [0]的类型为int,&a [0] [0] [0]的类型为int *,a [0] [0]的类型为int *,&a [0] [0] ]的类型为int(*)[6],a [0]的类型为int(*)[6],&a [0]的类型为int(*)[5] [6],a的类型为int (*)[5] [6],&a的类型为int(*)[4] [5] [6]
// CPP program to illustrate concept
// of pointers
#include 
int main()
{
    int a[4][5][6];
    int x = 0;
    int* a1 = &x;
    int** a2 = &a1;
    int*** a3 = &a2;
    printf("%d %d %d %d\n", 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 \n", (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 \n", (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 \n", (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 \n", (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

相关文章:

  • 指针测验
  • 悬空,无效,空指针和野生指针
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”