C指针之二维数组的运算和指针
发布日期:2021-05-07 15:11:55 浏览次数:20 分类:精选文章

本文共 973 字,大约阅读时间需要 3 分钟。

二维数组的运算和指针

指针指向二维数组的数组名

  • 二维数组的数组名表示二维数组的第一维数组中首元素(也就是第二维的数组)的首地址
  • 二维数组的数组名a等同于&a[0],这个和一维数组的符号含义是相符的
  • 用数组指针来指向二维数组的数组名是类型匹配的。
int a[2][5] = {  {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};printf("a[1][3] = %d.\n", a[1][3]);printf("a[1][3] = %d.\n", *(*(a+1)+3));//int *p1 = a;		// 类型不匹配//int **p2 = a;		// 类型不匹配// 指针指向二维数组的数组名int (*p3)[5];		// 数组指针,指针指向一个数组,数组有5个int类型元素p3 = a;				// a是二维数组的数组名,作为右值表示二维数组第一维的数组					// 的首元素首地址,等同于&a[0]p3 = &a[0];printf("a[0][3] = %d.\n", *(*(p3+0)+3));printf("a[1][4] = %d.\n", *(*(p3+1)+4));

指针指向二维数组的第一维

  • 用int *p来指向二维数组的第一维a[i]
// 指针指向二维数组的第一维//int *p4 = &a[0];		// 不可以int *p4 = a[0];			// a[0]表示二维数组的第一维的第一个元素,相当于是						// 第二维的整体数组的数组名。数组名又表示数组首元素						// 首地址,因此a[0]等同于&a[0][0];int *p5 = &a[0][0];	printf("a[0][4] = %d.\n", *(p4+4));int *p6 = a[1];printf("a[1][1] = %d.\n", *(p6+1));

指针指向二维数组的第二维

  • 二维数组的第二维元素其实就是普通变量了(a[1][1]其实就是int类型的7),已经不能用指针类型和它相互赋值了。
  • 除非int *p = &a[i][j];类似于指针指向二维数组的第一维。

总结:二维数组和指针的纠葛,关键就是2点:

  • 数组中各个符号的含义。
  • 数组的指针式访问,尤其是二维数组的指针式访问。
上一篇:虚拟机CentOS8安装教程
下一篇:C指针之二维数组

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月02日 06时45分10秒