当前位置:   article > 正文

指针与函数(五)之指针和二维数组_二维数组指针函数

二维数组指针函数

指针与函数(五)之指针和二维数组

数组名是数组第一个元素的地址,也是数组的首地址。

二维数组的数组名可看作是指向指针的指针

#include <stdio.h>

int main()
{
	int array[4][5]={0};
	printf("sizeof int:%d\n",sizeof(int));
	printf("array: %p\n",array);
	printf("array + 1:%p\n",array + 1);
	
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

结果如下:
在这里插入图片描述
分析如下:
array+1的地址比array的地址大:D4-C0=14
十六进制的14,转换为十进制为:20
每个整型是4个字节,相当于跨越了5个元素

解引用:在一个地址的前面加上取值运算符“*”,即把一个地址的值取出来,这种操作叫做解引用。

*(array+1)表示什么?

*(array+1) == array [1]
指向第二行子数组的第一个元素的地址
在这里插入图片描述

#include <stdio.h>

int main()
{
	int array[4][5]={0};
	int i,j,k = 0;
	
	for(i=0;i<4;i++)
	{
		for(j=0;j<5;j++)
		{
			array[i][j] = k++;
		}
	}
	
	
	printf("*(array+1):%p\n",*(array+1));
	printf("array[1]: %p\n",array[1]);
	printf("array[1][0]:%p\n",&array[1][0]);
	printf("**(array+1):%d\n",**(array+1));
		
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

二维数组里面其实是放了一维数组,这样一维数组对于二维数组来说就是元素,就像数值对于一维数组来说是一个元素。

结果如下:
在这里插入图片描述

  • (*(array+1)+3)表示什么?

*(array+1)+3 == &array [1] [3]
在这里插入图片描述

#include <stdio.h>

int main()
{
	int array[4][5]={0};
	int i,j,k = 0;
	
	for(i=0;i<4;i++)
	{
		for(j=0;j<5;j++)
		{
			array[i][j] = k++;
		}
	}
	
	
	printf("*(array+1):%p\n",*(array+1));
	printf("array[1]: %p\n",array[1]);
	printf("array[1][0]:%p\n",&array[1][0]);
	printf("**(array+1):%d\n",**(array+1));
	printf("*(*(array+1)+3):%d\n",*(*(array+1)+3));
	printf("array[1][3]:%d\n",array[1][3]);
	
		
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

结果如下:
在这里插入图片描述

结论:
*(array+i) == array [i]
*( *(array+i)+j == array [i] [j]
*( * ( *(array+i)+j)+k) == array [i] [j] [k]

数组指针和二维数组

定义一个数组指针:

int(*p)[3];
  • 1
#include <stdio.h>

int main()
{
	int array[2][3] = {{0,1,2},{3,4,5}};
	int (*p)[3] = array;
	
	printf("**(p+1):%d\n",**(p+1));
	printf("**(array+1):%d\n",**(array+1));
	printf("array[1][0]:%d\n",array[1][0]);
	
	printf("*(*(p+1)+2):%d\n",*(*(p+1)+2));
	printf("*(*(array+1)+2):%d\n",*(*(array+1)+2));
	printf("array[1][2]:%d\n",array[1][2]);
	
	return 0;
 } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

结果如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/223628
推荐阅读
相关标签
  

闽ICP备14008679号