指针(三) 指针数组

指针数组定义

一维指针数组的定义形式

  类型名  *数组名[数组长度];

  char  *p[5];

一个数组,若其元素均为指针类型数据,称为指针数组,

指针数组中的每一个元素都相当于一个指针变量。

指针数组的初始化

使用地址为指针数组初始化

char *p[5]={“wangxiao”,”zhangyi”,”wenhua”,
”chenxu”,”liming”};

指针数组和二级指针

int main(  )
{  int i,k,j;
static char *str[4]={“Program”,”Fortran”, ” C” ,”Basic”};
char *temp;                         /*定义指针 *temp,作为临时变量交换两个字符串*/
for(i=0;i<4;i++)
for(j=i+1;j<4;j++)
if ( strcmp(str[i],str[j]  ) > 0 )
{   temp=str[j] ;
str[j]=str[i];
str[i]=temp;
}
for(i=0; i<4; i++)
printf(“%s\n”,str[i] );
return 0;
}

访问二维数组中的元素

int a[3][3]= { 1, 2,3, 4,5,6, 7,8,9 };
int *pa[3] = { a[0], a[1], a[2] };

(1)  二维数组的每一行都可以看成一个一维数组,a[0],a[1],a[2]为数组名,
所以a[0],a[1],a[2] 是地址。
(2) 对指针数组中的第i 个元素, pa[i] 指向二维数组第i行的第一个元素。
(3) pa[i] 移动到第j列,指向a[i][j]元素

*(pa[ i ]+j) 从指针数组元素的地址访问后续元素;
*(a[ i ]+j )    从一维数组的首地址访问后续元素;
*(*(a+i )+j ) 从二维数组的首地址访问后续元素;
a[ i ] [ j ]       二维数组下标法
上述四个表达式等价

 

指针的指针:指向指针变量的指针变量。指针的指针存放的是指
针变量地址。(二级指针)
指针的指针的定义
格式: 类型 **指针变量名;

int i=2; /* 定义整型变量i */
int *p1,**p2;            /* 定义p1为整型指针,定义p2为整型指针的指针 */
p1=&i;                     /* i的地址=>p1,即指针p1指向变量i */
p2=&p1;                  /* 指针p1的地址=>p2,即指针p2指向指针p1 */
对变量i的访问 i, *p1, **p2。

使用指向指针的指针。
/*二级指针应用*/
#include<stdio.h>
int main()
{ char *name[ ]={"Book","Cell Phone", "Table","Program","Computer"};
/*定义指针数组,并用字符串为其初始化*/
char **p;
int i;
for(i=0;i<5;i++)
{ p=name+i; /*二级指针指向指针数组*/                       
printf("%s\n",*p); }
return 0;
}

例:一个指针数组的元素指向整型数据。
#include <stdio.h>
int main( )
{ int a[5]={1,3,5,7,9};
int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
int **p, i;
p=num;
for(i=0;i<5;i++)
{ printf(“%5d”,**p);
p++;
}
return 0;
}

指针与数组的等价性--数组名代表起始地址
 一个一维数组和一个指针等价,都代表地址,都可以访问数组中
的所有元素;int a[10] 与指针 int *pa
 一个二维数组,可以看成是一个一维数组,每个元素又是个一维
数组;int a[3][4] 与int a[3]={a[0],a[1],a[2]}
 一个指针数组,指向二维数组的每一行,指针数组的数组元素是
指针,所以指向指针数组的指针就是指针的指针。即,可以使用
“指针的指针”指向指针数组。int *pa[3],int a[3][4]与int **p
等价

 

指针说明 含 义
int i; 定义整型变量i
int *p; p为指向整型数据的指针变量
int a[10]; 定义整型数组a,它有10个元素
int *p[10]; 定义指针数组p,它由10个指向整型数据的指针元素组成
int (*p)[10]; p为指向含10个元素的一维数组的指针变量
int f( ); f为带回整型函数值的函数
int *f( ); p为带回一个指针的函数,该指针指向整型数据
int (*p)( ); p为指向函数的指针,该函数返回一个整型值
int **p; p是一个指针变量,它指向一个指向整型数据的指针变量

 

指针与多维数组

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值