C语言学习笔记——指针(二)

本文在C语言学习笔记——指针(一)的前提下,就某些关于指针的问题,进行进一步的讨论。

一、不同表达式下,指针的偏移量

不同表达式下,指针的偏移量是不一样的!

请看下面示例。

  • 例1:
  • 不同表达式下,指针的偏移量
  • 测试代码如下:
#include<stdio.h>

void main(int argc, char const *argv[])
{
	//定义一个int型一维数组以及二维数组
	int a[5] = {1,2,3,4,5};
	int b[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
	int (*p)[5] = &a;

	printf("一维数组:\n");
	printf("================\n");	
	printf("a = %p\n",a);
	printf("&a[0] = %p\n",&a[0]);
	printf("&a = %p\n",&a);
	printf("================\n");
	printf("a+1 = %p\n",a+1);
	printf("&a[1] = %p\n",&a[1]);
	printf("&a+1 = %p\n",&a+1);
	printf("================\n");
	printf("二级指针 指向 一维数组:\n");
	printf("int (*p)[5] = &a;\n");
	printf("p = %p\n",p);
	printf("*p = a = &a = &a[0] = %p\n",*p);
	printf("================\n");
	printf("(*p)+1 = a+1 = &a[0]+1 = &a[1] = %p\n",(*p)+1);
	printf("p+1 = %p\n",p+1);
	printf("================\n");
	printf("二维数组:\n");
	printf("b = %p \n",b);
	printf("b[0] = %p\n",b[0]);
	printf("&b[0][0] = %p\n",&b[0][0]);
	printf("&b = %p\n",&b);
	printf("================\n");
	printf("b+1 = %p \n",b+1);
	printf("b[1] = %p\n",b[1]);
	printf("&b[1][0] = %p\n",&b[1][0]);
	printf("b[0]+1 = %p\n",b[0]+1);
	printf("&b+1 = %p\n",&b+1);

	return ;
}

输出结果,如图所示:

  • 在一定意义上,数组就是指针,指针就是数组。一级指针对应一维数组、二级指针对应二维数组。
  • 接下来用两张图来分别一维数组以及二维数组解释对应的输出结果:
  • 一维数组:

  • 二维数组:

希望本文,能帮助大家进一步理解指针与数组!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的猫丿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值