用指针表示二维数组的4种方式

剧情回顾:12/25 周五,华老师说如果能自己写出来4种方式,就因该掌握了,指针在数组方面的应用。于是有了,这篇文章,文章的内容会同步到《指针(心路历程)》这篇博客中。

1. 列指针
2. 行指针
3. 指针数组
4. 二级指针

强调一点
指针 在引用的时候,应该避免出现歧义。
例如 int a[3][4];
int ** p=a; //这种就是错误的,虽然都是二级指针,但是,指向的类型其实是不一样的。a指向的是数组中的1行,而p是指向某个指向整形元素的指针。两者并不相同。

//如何用指针的表示二维数组 
#include
int main()
{
	int a[3][4]={1,2,3,4,11,22,33,44,99,88,77,66};
	int i,j;
	//①一级指针,列指针 
	int *p1=&a[0][0];
	printf("    列指针\n");
	for(i=0;i<3;i++)
	   for(j=0;j<4;j++)
	   {
   		  printf("%4d",*(p1+i*4+j));
   		  if(j==3)printf("\n");
   	   }
	//②二级指针,行指针。
	int (*p2)[4]=a;
	printf("    行指针\n");
	for(i=0;i<3;i++)
	   for(j=0;j<4;j++)
	   {
   		  printf("%4d",*(*(p2+i)+j));
   		  if(j==3)printf("\n");
   	   }
	//③ 指针数组
	int * p3[3];
	p3[0]=*a;
	printf("    指针数组\n");
	for(i=0;i<3;i++)
	   for(j=0;j<4;j++)
	   {
   		  printf("%4d",*(p3[0]+i*4+j));
   		  //   *(*p3+i*4+j)  也一样 
   		  if(j==3)printf("\n");
   	   }
	//④二级指针
	int **p4,*b;
	p4=&b;   //这个地方一定要初始化,避免野指针,后果看下面的图。
	*p4=*a;
	//printf("%d\n",a[1][3]);
	printf("    二级指针\n");
	for(i=0;i<3;i++)
	  for(j=0;j<4;j++)
	  {
  		  printf("%4d",*(*p4+i*4+j));
  		  if(j==3)printf("\n");
  	  }		  	   	   
	return 0;
}

用指针表示二维数组的4种方式_第1张图片
初始化后
用指针表示二维数组的4种方式_第2张图片

最近看到tzoj上的一句话感觉挺深刻的。
用指针表示二维数组的4种方式_第3张图片

你可能感兴趣的:(C语言,c语言,指针)