C语言中 指针类型的意义

对于初学者也包括我来说指针不就是来存放地址的吗 应该会有一个疑惑 为什么还有那么多类型char*  int*等等不都能存放一个地址无论是整形还是字符 那这个指针类型能有什么意义呢 

有的有的兄弟 他的真正意义就在于解引用上面*p

指针类型决定了 指针进行解引用操作时 一次能访问几个字节的空间 是访问权限的大小

比如char*的指针 解引用访问1个字节的空间

比如int* 的指针 解引用访问4个字节的空间

比如double*的指针 解引用访问8个字节的空间

...........

接下来给出一段代码实例

#include<stdio.h>
int main()
{
	int a = 0x11223344;
	char* pa= &a;
	*pa = 0;
	
	return 0;
}

我们调试起来看内存的情况  找到a的地址

可以看到a再内存中的存储是倒着放的 在小端存储中是这样的 大端存储就是正着放的了

继续往下走到*pa = 0;这一步完成之后 a的内存存贮会发生这样的变化

44 变成了 00   那为什么不是全变成0呢

这就是指针类型在搞鬼 我们知道16进制的数字中2位代表一个字节的大小 char*解引用时正好访问一个字节的大小的权限 只改变44就说的通了

指针的类型也决定了指针的步长针对的是指针变量的本身(指针+1跳过几个字节的长度)

字符指针+1,就跳过1个字节

整形指针+1,就跳过4个字节

.................

代码展示

#include<stdio.h>
int main()
{
	int a = 0x11223344;
	char* pa= &a;
	for (int i = 0; i < 2; i++)
	{
		*pa = 0;
		pa++;
	}
	return 0;
}

a的在内存中的存储变化↓

循环两次只改变两个字节的存储情况

实质上还是地址的变化

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

在16进制中c代表12
8 + 4 = 12  正好跳过四个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值