这里的B为什么不行?C就是正确的?B也可以写成*(pt+0)啊?

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

若有以下的说明和语句:
main()
{int t[3][2], *pt[3],k;
fpr(k=o; k<3;k++)pt[k]=t[k];
}
则以一选项中能正确表示 t 数组元素地址的表达式是
A) &t[3][2] B) *pt[0]
C) *(pt+1) D) &pt[2]式是

注意int * pt[3]; pt是一个指向三个指针的数组,三个指针可以用pt[0], pt[1], pt[2]来表示,所以 pt[0]其实就是一个一维数组的首地址,同时也是一个int的首地址,所以 pt[0]本身就是t数组的首地址,如果加*就成取首地址的值了。
你可以测试试试:

img

你没理解*pt[0]和*(pt+0)的区别,前者是一个数值,为pt[0]这个是个地址,加个*解指针引用变成取指针指向的值,后者为指针,他本身就是一个地址,你可以看到他和pt[0]是同一个地址值

img

B pt[0]
C (pt+1)
pt[0] 和(pt+1)的概念是不一样的
pt[0]表示的是pt数组的首元素的值 等价于 &t[0][0] 加上
后 等价于 t[0][0] 结果是一个值而不是地址
pt+1 表示的是pt下一个元素的地址 因为pt是一个指针,对指针的计算操作,结果也还会是一个指针类型,pt+1 实际等价于 t[1],加上
后*(pt+1) 等价于&t[1][0]