指针数组和数组指针

1)指针数组

先不忙解释含义,类比一下其他的名词。

整型数组:即有一个数组,里面存储的元素类型是整型。  int a[10]

字符数组:定义一个数组,数组元素的数据类型是字符型。     char c[10]

指针数据:定义一个数组,数组元素的数据类型是指针型,指针就是地址。

int *p[10]; //数组p有10个元素,元素类型是指针型,指向整型数的地址。

来看例子:

 1 #include "stdafx.h"
 2 #include<iostream>
 3 #include<stdio.h>
 4 void main()
 5 {
 6  int a=1,b=4,*p[2]={&a,&b};
 7  //p指向p[0],p[0]指向a,则p+1指向p[1],p[1]指向b,即*(p+1)=&b,b=a+b;b=5
 8  **(p+1)=a+b;
 9  //*p是p[0]是&a,则*(*p+1)=*(&a+1),a的地址的下一个单元,的值是a+b=6,注意此时b 的值已经变为5
10  *(*p+1)=a+b; 
11  printf("a的地址是:0x%0x\n",&a);
12  printf("b的地址是:0x%0x\n",&b);
13  //p是数组,所以p[0]和p[1]的地址是连续的,&p[0]是存放a的地址的地址(&&a)
14  //&p[1]是存放b的地址的地址(&&b)
15  printf("p的地址是:0x%0x 0x%0x\n",&p[0],&p[1]);
16  printf("a的下一个单元的地址是:0x%0x\n",&a+1);
17  printf("a的下一个单元的值是:0x%0x\n",*(&a+1));//输出6
18  printf("a=%d,b=%d\n",a,b);//输出1,5
19  system("pause");
20 }

输出结果:

 

2) 数组指针

类比整型指针int *p; 定义一个指针变量p指向一个整型数

字符型指针char *c; 定义一个指针变量c指向一个字符型变量

int (*p)[4]; 定义一个指针p指向一个数组,这个数组有4个int型的元素。

下面看例子:

 1 #include "stdafx.h"
 2 #include<iostream>
 3 #include<stdio.h>
 4 void main()
 5 {
 6  int a[3][2]={0},i,j;//定义一个3行2列的2维数组,用数据0来初始化
 7  int (*ptr)[2];//定义一个指向有2个int型元素的数组的指针
 8  for(i=0;i<3;i++)
 9  {
10   ptr=a+i;//ptr指向2维数组的第i行,数组a的每一行有2个元素,类型匹配
11   printf("请输入第%d行的两个元素:",i+1);
12   /*这里要注意,一般scanf时,与%d对应的是地址
13   ptr是指向一个一维数组的,ptr+1就指向了下一个一维数组,地址跳跃8
14   要想取到里面的值,*ptr指向数组的第0个元素,*ptr+1指向数组的第1个元素
15   */
16   scanf("%d%d",*ptr,*ptr+1);
17   ptr++;
18  }
19  for(i=0;i<3;i++)
20  { for(j=0;j<2;j++)
21     printf("%d ",a[i][j]);
22     printf("\n");
23  }
24  system("pause");
25 }

输出结果:

 

posted @ 2015-10-23 12:44  dongyanxia  阅读(109)  评论(1编辑  收藏  举报