#include "stdio.h"
int main(void)
{int zippo[4][2]={{2,4},{6,8},{1,3},{5,7}};
int(*pz)[2];//第一个问题,这个语句定义了什么
pz=zippo;
printf("pz=%p,pz+1=%p\n",
pz,pz+1);
printf("pz[0]=%p,pz[0]+1=%p\n",
pz[0],pz[0]+1);//第二个问题,为什么两次输出结果中,pz与pz[0]一样,pz+1与pz[0]+1结果不一样?
}
第一个问题:int(*pz)[2];是定义一个数组指针,
第二个问题:没有%p这种格式控制字符,建议不要这样写,改成printf("pz=%d,pz+1=%d\n",pz,pz+1); 养成好的习惯,pz=zippo;是把zippo数组的首地址赋值给指针pz,你笔直调用printf("pz=%d,pz+1=%d\n",pz,pz+1); 输出的是数组的地址,而不是数组的值,pz对应的是数组第一个元素{2,4}中2的地址,而pz[0]也是数组第一个元素{2,4}中2的地址,所以相等,而pz+1是数组第二个元素{6,8}中6的地址,pz[0]+1是数组第一个元素{2,4}中4的地址,所以不会相等,你把pz[0]+1改成pz[0]+2就相等啦!因为数组元素的大小是2,你pz[0]+2就等于指针向下移动一个元素!
程序如下:
#include "stdio.h"
void main(void)
{
int zippo[4][2]={{2,4},{6,8},{1,3},{5,7}};
int(*pz)[2];
pz=zippo;
printf("pz=%d,pz+1=%d\n",pz,pz+1);
printf("pz[0]=%d,pz[0]+2=%d\n",pz[0],pz[0]+2);
}
望采纳。嘻嘻....... 运行的结果你看下:
问一下如果想用这个指针输出数组第二行第一列的数字,怎么编写呢?