c语言初级指针和数组问题

#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);

}

望采纳。嘻嘻....... 运行的结果你看下:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-23
#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结果不一样?(因为pz指的是pz[0]而pz+1=pz[1],但是pz[0]+1表示pz这个地址值加1

}
第2个回答  2011-03-23
int(*pz)[2];//第一个问题,这个语句定义了什么
定义了一个数组,这个数组中有两个int型指针
第二个问题,为什么两次输出结果中,pz与pz[0]一样,pz+1与pz[0]+1结果不一
pz指向的是zippo数组 并且是二维数组的地址
pz[0]就是pz + 0 为zippo数组第一行的地址
注意这里数组的地址和数组第一行的地址是一样的!
pz+1 为zippo数组第二行的地址
pz[0]+1 为zippo数组第一行,第二个元素的地址
所以pz+1与pz[0]+1结果不一样追问

问一下如果想用这个指针输出数组第二行第一列的数字,怎么编写呢?

第3个回答  2011-03-23
#include "stdio.h"
int main(void)
{int zippo[4][2]={{2,4},{6,8},{1,3},{5,7}};
int(*pz)[2];//第一个问题,这个语句定义了什么 定义了一个指向有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结果不一样? pz与pz[0]都是指向数组的首地址,当然一样,而pz+1与pz[0]+1中,pz+1是指的第二行的首地址,而pz[0]+1是指的第一行的第二个元素

}
第4个回答  2011-03-23
int(*pz)[2];//第一个问题,这个语句定义了数组指针
pz[0],pz[0]+1);//第二个问题,为什么两次输出结果中,pz与pz[0]一样,pz+1与pz[0]+1结果不一

pz[0]和pz都指向数组zippo的第一行的第一个元素
而pz+1指向数组zippo的第二行的第一个元素
pz[0]+1指向数组zippo的第一行的第二个元素

应该是这样的。。。。。。。。。。。。。
第5个回答  2011-03-23
1.语句定义zippo为一个指向一维数组的指针变量,一维数组中含有2个整型元素
2.语句pz=zippo;作用是将数组zippo首地址(数组元素2的地址)赋给指针pz,pz[0]表示数组zippo[0][0]的地址,即元素2的地址,所以pz=pz[0]。pz+1是作为行指针使用,表示数组第二行的首地址,即数组元素6的地址;pz[0]+1是作为元素指针使用,表示数组第0行第2个元素的地址,即数组元素4的地址。