int *p;int a[2][2] = {1, 2, 3, 0}; p = a[0]; printf("%d, %d", *p, *(p+1)); 和int *p;int a[2][2] = {{1, 2},{ 3, 0}}; p= a[0]; printf("%d, %d", *p, *(p+1));运行结果有什么区别,为什么?
时间: 2024-04-16 22:25:40 浏览: 89
这两个代码片段的运行结果会有区别。
第一个代码片段中,二维数组a的初始化是逐行进行的,即第一行初始化为1和2,第二行初始化为3和0。然后将a[0]的地址赋给指针p,即p指向a的第一行。接着,通过*p和*(p+1)分别取得a[0][0]和a[0][1]的值,即1和2。因此,打印结果为"1, 2"。
而第二个代码片段中,二维数组a的初始化是整体初始化的,即第一行初始化为1和2,第二行初始化为3和0。然后将a[0]的地址赋给指针p,即p指向a的第一行。接着,通过*p和*(p+1)分别取得a[0][0]和a[0][1]的值,即1和2。因此,打印结果仍然为"1, 2"。
所以,这两个代码片段的运行结果是相同的。无论是逐行初始化还是整体初始化,最终都可以通过指针p访问到二维数组a的元素。
阅读全文