指针(3)

发布时间:2023年12月22日

????????C语言昂,指针昂,最喜欢的一集,小时候学这一课我直接取地址了。上一篇博客给大家讲解了不同类型的指针变量的大小,今天来给大家讲解一下根据其所产生的一些性质。(往期回顾:指针(2)-CSDN博客

? ? ? ? 根据上一篇博客的意思:既然不同类型的指针变量的大小都是一样的,那么为什么我们还要区分指针的类型呢?为什么不直接用一种通用类型的指针来涵盖所有的指针呢?这种想法其实我也有过,就像秦始皇统一度量衡一样,假如有个统一的指针类型,那么我们用(学)指针不也很方便易懂了吗?但经过后面的学习发现,事情没有想象得这么的简单,听我娓娓道来:

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a = 10;
	int* p = &a;
	printf("%p\n", p);
	return 0;
}

????????我们来看这个代码,我们将a初始化为10,然后用p这个指针来存储a的地址,然后我们打印出p来看看(其实打印的就是a的地址。)

? ? ? ? 我们可以看到用inr来当作指针的类型,然后打印出的p是这样的,接下来我们将其+1

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a = 10;
	int* p = &a;
	printf("%p\n", p );
	printf("%p\n", p+1);
	return 0;
}

? ? ? ? 我们发现p的值(a的地址+了4个字节),而这4个字节就是int类型所占的空间,所以说我们推断在不同类型的指针进行计算的时候,运算的是它类型的大小,假如说int类型的指针进行+1运算,实际上是+了4个字节;但用double类型的指针进行+1,就会+8个字节……这是我们的猜想,让我们来用代码进行实现,验证一下这个猜想:?

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	double a = 10;
	double* p = &a;
	printf("%p\n", p);
	printf("%p\n", p+1);

	return 0;
}

?

? ? ? ? 因为是16进制表示的地址,所以说我们对double指针+1?,实际上是+了8个字节的;让我们来试试char类型呢?

? ? ? ? 正好,char类型的指针+了1个字节,这和我们的猜想一样——这就说明了当我们对指针进行运算时,加减的是指针类型的大小。这也就侧面说明了为什么不能统一指针类型,当我们指针的运算有了一定的了解之后,我们可以为指针与数组的结合又埋下伏笔了。?

文章来源:https://blog.csdn.net/Aishangyuwen/article/details/135150954
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。