【问题标题】:Explain the o/p of following program [closed]解释以下程序的o/p [关闭]
【发布时间】:2015-11-02 08:23:34
【问题描述】:

解释下面程序的o/p。

int main()
{
    int a [2][3] = {5,10,15,20,25,30}; 
    int (*p) [2][3] =&a;
    printf ("%d\t", ***(p+1)); 
    printf ("%d\t", ***p); 
    printf ("%d\t", ** (*p+1));
}

输出:-

Garbage, 5,20?

【问题讨论】:

  • 缩进代码并使其可读
  • 没什么好解释的; *(p+1) 未定义。

标签: c++ c pointers


【解决方案1】:

p 是一个指向大小为[2][3] 的二维数组的指针。

1) p+1 这将增加 p 以跳转到其类型的下一个变量,即大小为[2][3] 的二维数组。由于这个地方还没有被分配,它超出了数组a。所以,它的未定义行为,所以只有它给出垃圾值..

2) ***p 只是取消引用指针并转到第一个值5

3) 要了解最后一个是如何工作的,您需要了解数组取消引用的工作原理。 a[1][0] 实际上变成了*(*(a+1) + 0),因此将给出值20。所以,因为p&a,所以*pa。现在将*(*(a+1) + 0) 中的a 替换为*p。这就是第三个答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    相关资源
    最近更新 更多