1.数组指针引用二维数组元素
#include<stdio.h>
#define m 3
#define n 4
int main()
{
int i,j;
short array[m][n]={0,1,2,3,4,5,6,7,8,9,10,11};
short (*pst)[n]=NULL; //定义数组指针
pst=array; //数组指针指向二维数组首地址
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%4d",*(*pst+j));
} //数组指针自增运算
pst++;
}
printf("\n");
}
2.数组指针作二维数组形参,传递二维数组首地址,在子函数中实现输出二维数组中每一行最大值
#include<stdio.h>
#define n 5
void max(int (*ptr)[n])
{
int i,j,max_value=0;
if(ptr==NULL) //非法入参判断 /*输入参数检查, */
{ /*若入参为NULL, */
printf("错误,输入参数为NULL\n"); /*退出函数*/
return;
}
for(i=0;i<n;i++)
{
max_value=ptr[i][0]; //首行赋初值
for(j=0;j<n;j++)
{
if(max_value<*(ptr[i]+j))//条件判断
{
max_value=*(ptr[i]+j);//赋值
}
}
printf("最大值为%5d,第%d行\n",max_value,i);
}
}
int main()
{
int array[n][n]={133,-89,0,1025,58,
40,-78,69,889,20,
56,28,-45,77,90,
6,-18,-27,3,1,
10001,5894,-78564,60,8};
max(array);
}
测试结果:
最大值为 1025,第0行
最大值为 889,第1行
最大值为 90,第2行
最大值为 6,第3行
最大值为10001,第4行
3.指针数组指向字符串
static char data[8][N]={"Sunday", //静态字符数组定义
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
"Illegal input index"};
该数组可用如下指针数组代替:
static char *data[N]={"Sunday", //静态字符数组定义
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
"Illegal input index"
元素data[1]指向字符串"Monday"的首地址
4.指针数组指向二维数组
int *p_array[2]=NULL; //定义含两个元素指针数组p_array
int array[2][3]={666,555,444,333,222,111}; //定义二维指针array
p_array[0]=array[0]; //使p_array[0]指向array第一行首地址
p_array[1]=array[1]; //使p_array[1]指向array第二行首地址
不能通过对p_array做自增运算获取array的第二行首地址,如p_array++是非法的
5.指向指针的指针(二维指针)
例如:int **p_pointer;将一个二维指针指向另一个指针的地址,并使用其输出一维指针所指变量值
#include<stdio.h>
int main()
{
int a=0;
int *pa=NULL;
int **p_pa=NULL;
a=1234;
pa=&a;
p_pa=&pa;
printf("a=%d,*pa=%d,**p_pa=%d\n",a,*pa,**p_pa);
printf("&a=%x,pa=%x,&pa=%x,p_pa=%x\n",&a,pa,&pa,p_pa);
return 0;
}
/*测试结果:
a=1234,*pa=1234,**p_pa=1234
&a=62fe14,pa=62fe14,&pa=62fe08,p_pa=62fe08*/
6.main函数参数
一般定义形式:main(int argc,char *argv[]}
形参中第一个变量argc用于记录命令行中字符串个数
第二个变量argv用于记录每一个字符串首地址