C语言-行指针、列指针和数组元素的转化公式
①引子
众所周知
一维数组中
元素*p=p[0]
地址p=&p[0]
~
二维数组中
列指针是数组元素的地址
行指针是列指针的‘地址’
(但不是单纯的取址)
即
行指针→列指针→元素
~
②加*
int**(指向指针的指针)→int*(指针)→ int(变量)
行指针→列指针→元素
是逐渐‘加*’的过程,
列指针→元素,加*
行指针→列指针,加*加列
(不是单纯加*)
~
行指针p
列指针*p+j
元素*(*p+j)=*(p[0]+j)=*(p+0)[j]=p[0][j]
~
行指针p+i
列指针*(p+i)+j
元素*(*(p+i)+j)=*(p[i]+j)=*(p+i)[j]=p[i][j]
~
③加&
int(变量)→int*(指针)→int**(指向指针的指针)
元素→列指针→行指针
是逐渐‘加&’的过程,即‘减*’
&和*可以相互抵消。
元素→列指针,加&
列指针→行指针,加&减列
(不是单纯加&)
行指针作为数组名是不能继续取址的,
即没有int***
~
元素*(*p+j)=*(p[0]+j)=*(p+0)[j]=p[0][j]
列指针*p+j=p[0]+j=(p+0)[j]=&p[0][j]
行指针p=&(p[0]+j)=&(p+0)[j]=&&p[0][j]
~
元素*(*(p+i)+j)=*(p[i]+j)=*(p+i)[j]=p[i][j]
列指针*(p+i)+j=p[i]+j=(p+i)[j]=&p[i][j]
行指针p+i=&(p[i]+j)=&(p+i)[j]=&&p[i][j]
~
就这么简单,
你学会了吗?