求解释一下 的程序流程及选项答案的意思

int c[4][5], *cp[4];
for(int j=0;j<4;j++)
cp[j]=c[j];
A.
cp+1
B.
*(cp+3)
C.
*(cp+1)+3
D.
cp[2][3]

声明了一个的二维数组 c.和一个指针数组cp
for(int j=0;j<4;j++) 用于遍历数组4次.(j= 0 1 2 3),4的时候退出for循环.
cp[j]=c[j];的意思是将二维数组的每一行地址赋值给指针数组
选项A.
cp+1 表示 cp指针数组 加一个单位 的地址即c[1];
选项B.
*(cp+3) 表示cp的地址,即cp[0][0] +3个单位的地址取值,即cp[3]数组的值
选项C.
*(cp+1)+3 表示cp的地址,即cp[0][0] 加 1个单位的地址的值再加3,即c[1]的值+3
选项D.
cp[2][3] 表示指向的值即是c[2][3]的值

1️⃣int c[4][5], * cp[4];
首先,定义了一个整型二维数组c[4][5],和一个指针(指向整型数据的)数组cp[4]
2️⃣for(int j=0;j<4;j++)
接着,借助for循环,遍历,由于循环从j=0开始,j>=4结束,j++即步长为1,也就是要循环四次,分别是j=0,1,2,3
3️⃣cp[j]=c[j];
这里是将数组c里的每一行行地址

如有帮助,还请帮忙点下采纳!感谢!

int c[4][5], cp[4]; // int型二维数组,int型指针数组(也可以看成二维数组)
for(int j=0;j<4;j++) // 循环结构,初始循环变量j为0;在j>=4的时候循环不在执行;每次循环体执行完后j自增1
cp[j]=c[j]; // 将int指针数组的每个指针分别指向int型二维数组c的一维起始地址,(即
cp[0]指向&c[0][0],即*cp[1]指向&c[1][0]依次类推)
A.
cp+1 // 表示cp指针数组加一个维度的地址即&c[1][0];
B.
*(cp+3) //cp的地址,即cp[0][0] +3个维度的地址取值,即cp[3][0],也是c[3][0]的值
C.
*(cp+1)+3 //cp的地址,即cp[0][0] + 1个维度的地址的值在+3,即c[1][0]的值+3
D.
cp[2][3] // 经过循环体后,cp指针有了指向,cp[2][3]所指向的值即是c[2][3]