指针数组练习(1)

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用于记录每一个字符串首地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章