全部博文(92)
分类: 嵌入式
2010-06-12 09:50:32
二维数组指针
多维数组与指针
表 示 形 式 |
含义 |
地 址 |
a |
二维数组名,指向一维数组a[0],即0行首地址 |
2000 |
a[0], *(a+0), *a |
0行0列元素地址 |
2000 |
a+1,&a[1] |
1行首地址 |
2008 |
a[1],*(a+1) |
1行0列元素a[1][0]的地址 |
2008 |
A[1]+2, *(a+1)+2, &a[1][2] |
1行2列元素a[1][2] 的地址 |
2012 |
*(a[1]+2), *(*(a+1)+2), a[1][2] |
1行2列元素a[1][2]的值 |
元素值为13 |
定义 |
含义 |
int i; |
定义整型变量i |
int?*p; |
p为指向整型数据的指针变量 |
int a[n]; |
定义整型数组a,它有n个元素 |
int ?*p[n]; |
定义指针数组p,它由n个指向整型数据的指针元素组成 |
int (*p)[n]; |
p为指向含n个元素的一维数组的指针变量 |
int f(); |
f为带回整型函数值的函数 |
int ?*p(); |
p为带回一个指针的函数,该指针指向整型数据 |
int (*p)(); |
p为指向函数的指针,该函数返回一个整型值 |
int **p; |
p是一个指针变量,它指向一个指向整型数据的指针变量 |
#include
#define FORMAT ″%d,%d\n″
void main()
{ int a[3][4]={1,3,5,7,9,11,13,
15,17,19,21,23};
printf(FORMAT,a,*a);
printf(FORMAT,a[0] , *(a+0));
printf(FORMAT,&a[0],&a[0][0]);
printf(FORMAT,a[1],a+1);
printf(FORMAT,&a[1][0],*(a+1)+0);
printf(FORMAT,a[2],*(a+2));
printf(FORMAT,&a[2],a+2);
printf(FORMAT,a[1][0],*(*(a+
1)+0));
}
某一次运行结果如下:
158,158 (0行首地址和0行0列元素地址)
158,158 (0行0列元素地址)
158,158 (0行0首地址和0行0列元素地址)
166,166 (1行0列元素地址和1行首地址)
166,166 (1行0列元素地址)
174,174 (2行0列元素地址)
174,174 (2行首地址)
9,9 (1行0列元素的值)
用指针变量输出二维数组元素的值
#include
void main()
{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int?*p;
for(p=a[0];p<a[0]+12;p++)
{if((p-a[0])%4==0)
printf(″\n″);
printf(″%4d″,*p); }
}
出二维数组任一行任一列元素的值
#include
void main ( )
{ int a[3][4]={1,3,5,7,9,11,
13,15,17,19,21,23};
int (*p)[4],i,j;
p=a;
scanf(″ i=%d,j=%d″,&i,&j);
printf(″a[%d,%d]=%d\n″,i,
j,*(*(p+i)+j));
}
数组指针
void main(int argc,char *argv[ ])
{while(argc>1)
{++argv;
printf(″%s\n″,argv);
--argc;
}
}
数组指针和指向指针的指针
#include
void main()
{ char *name[]={"Follow me","BASIC","Great Wall″,"FORTRAN","Computer design"};
char ?**p;
int i;
for(i=0;i<5;i++)
{p=name+i;
printf(″%s\n″,*p);
}
}