现在的位置: 首页 > 综合 > 正文

指针数组和数组指针

2013年10月08日 ⁄ 综合 ⁄ 共 817字 ⁄ 字号 评论关闭

#include <stdio.h>
#include <stdlib.h>

int main()
{
 int  i,j;

 int a[3][2] = {{1,2},{3,4},{5,6}};
 int *p = a[0];

 int (*q)[2];//数组指针 q是一个指针,指向一维数组,每个一维数组有2个元素,所以q是行指针
 q = a;

 int *ptr[3];//指针数组,ptr有3个元素,每个元素是一个指针。
 for(i = 0; i < 3; i++)
 {
  ptr[i] = a[i];//保存每一列首数据的地址
  for(j = 0; j < 2; j++)
  printf("%d",*(ptr[i]+j));
 }
 printf("\n");

 for(i = 0; i < sizeof(a)/sizeof(int); i++)
 {
  printf("%d",*(p+i));//通过列指针,输出数组元素
 }
 printf("\n");

for(i=0;i<3;i++,q++)//p可看成是行指针
    {
        printf("%3d ",**q);//每一行的第一个元素
        printf("%3d ",*(*q+1));//每一行的第二个元素
        printf("/n");
    }

 

 for(i = 0; i < sizeof(a)/sizeof(int); i++)
 {
  printf("%d",*((int *)q+i));//通过行指针,输出数组元素
 }
 printf("\n");

 for(i = 0; i < 3; i++)
  for(j = 0; j < 2; j++)
   printf("%d",*(*(q+i)+j));
 printf("\n");

 

 for(i = 0; i < 3; i++)
 {
  printf("%d",*(*(q+i)));
  //q保存的是数组的行地址,*q保存的是a[0]的首地址,所以**q取得是数组的首元素
 }
 printf("\n");

 return 0;
}

 

抱歉!评论已关闭.