C语言学习之:指针类型的意义

  • 先看这段代码
int main() {

	int a = 123;
	int* p = &a;
	char* p_ = &a;

	printf("%p\n", p);
	printf("%p\n", p_);

}

在这里插入图片描述

  • 可以看到无论是用 int 类型的指针变量或是 char 类型的指针变量似乎都能接受一个地址,那么指针变量的类型有什么意义呢?

解引用操作的时候,访问空间的大小

在这里插入图片描述

  • 首先我们设一个 int 类型的变量 a,值是一个 4 字节的数值,我们可以看到在内存中它的表示如图
  • 此时用 int 类型的指针变量 p 来指向 a 的地址,
  • 最后通过 *p 的解引用操作,我们可以获得 a 变量的值,或者更改 a 变量的值;在本文中我们对 a 的值进行更改,更改后的内存变化如下:
    在这里插入图片描述
    • 清晰的是,由指针变量 p 是 int 类型的,因此它的权限是 4 个字节的数据;如果我们使用 char 类型的指针变量会如何呢?

在这里插入图片描述

  • 一开始选择使用 char 类型的指针变量 p 来指向变量 a

  • 通过 *p = a 对 a 中的变量值进行修改
    在这里插入图片描述

    • 神奇的是, char 的改动权限只有 1 个字节!!!
  • 因此从上面我们可以得出结论,指针的类型非常重要。

决定指针向后移动一个单位的距离


int main() {

	int arr[5] = { 0 };
	int* p = arr;
	for (int i = 0; i < 5; i++)
	{
		*(p + i) = 1;
	}

}
  • 指定一个长度为 5 的数组,他们的元素都是 0
  • 通过指针变量 p 将数组的所有值置 1
  • 因为数组是 int 类型的,因此包含 5 个元素的数组是 20 个字节的长度,而 int 类型的指针变量 p 每次向后移动一个单位(即 (p+1))都是向后移动 4 个字节,因此刚好一一对应
  • 但如果设置 p 的类型为 char 类型,那么移动五次只能移动 5 个字节,而全部数组涉及 20 个字节,因此改动的结果如下:
    在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

暖仔会飞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值