|
发表于 2019-1-29 21:21:04
|
显示全部楼层
哦,我明白了,是因为指向的级别不同。
s[3][10]是一个二维数组,而*p是一级指针,直接指向s[0][0]就是越级,所以p不能直接通过s指向s[0][0],只能指向s[0].若想要指向s[0][0],则需要一个二级指针**q,令p=s[0],q=&p就可以了,或者也可以直接p=&s[0][0],反正就是不能直接通过指向上一级数组就指向下一级。
由于数组的第一个元素比较特别,s,s[0],s[0][0]都是相等的,所以会有一定的迷惑性,如p=s,由于s是一个二维数组,所以p并没有指向具体的元素s[0][0],而是指向了一个一维数组s[0],但它们的地址是相等的,所以这并没有影响到p的值。如果举一个一般情况,如s[0][3],想要指向这个元素,就得p=*(s+0)+3,而指向s[0][0],其实就是p=*(s+0)+0,都是经过一定的变化才能得到,只不过+0就相当于没加一样。
顺带一提,我之前一直用vc++6.0写C语言,这里,写成p=s不但不会出错,还可以正确地得到s[0][0]的地址,但会有一处警告:
'char *' differs in levels of indirection from 'char (*)[10]'
‘char*‘与‘char(*)[10]’的间接级别不同
最近一直在学Python,c语言有些忘了,经过这一次,总算想起来了,感谢你这么耐心的回答我的问题
  |
|