"代码片段一:\nint *p; \nint a[2][2] = {1, 2, 3, 0}; \np = a[0]; \nprintf("%d, %d", *p, *(p+1)); \n\n代码片段二:\nint *p; \nint a[2][2] = {{1, 2}, {3, 0}}; \np= a[0]; \nprintf("%d, %d", *p, *(p+1)); \n\n以上两段代码为什么执行结果不一样" \n\n执行结果不一样是因为数组的初始化方式不同。 \n\n在代码片段一中,数组a[2][2]的初始化方式是逐个赋值,即a[0][0]=1, a[0][1]=2, a[1][0]=3, a[1][1]=0。而指针p指向a[0],即数组的第一行,p的值为数组第一个元素的地址,即a[0][0]的地址。所以,p就是a[0][0]的值,即1,(p+1)就是a[0][1]的值,即2。 \n\n在代码片段二中,数组a[2][2]的初始化方式是使用二维数组的方式,即a[0]={1,2},a[1]={3,0}。指针p同样指向a[0],即数组的第一行,p的值为数组第一个元素的地址,即a[0][0]的地址。所以,p就是a[0][0]的值,即1,(p+1)就是a[0][1]的值,即2。 \n\n因此,代码片段一和代码片段二的执行结果都是1, 2。


原文地址: https://www.cveoy.top/t/topic/pOp0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录