BSP Day 16

指针及指针类型

char  *pc = NULL;
int   *pi = NULL;
short *ps = NULL;
long  *pl = NULL;
float *pf = NULL;
double *pd = NULL;

char* 类型的指针是为了存放 char 类型变量的地址。
short* 类型的指针是为了存放 short 类型变量的地址。
int* 类型的指针是为了存放 int 类型变量的地址。

我们知道在同一平台上,不同类型的指针大小其实是一样的,那为什么还要给指针分类型呢,或者说:指针类型的意义是什么?

我们来看这样一段代码

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

结果是这样的

 

为啥是这样的结果呢?pc和pi都是指针变量,也都加的是1,为什么结果就不同了呢?
其实我们很容易就能分析出原因:

指针变量pc和指针变量pi的唯一区别就是两者的类型不同,pc是char类型的指针变量,存放的是字符变量(大小为1个字节)的地址;
而pi是int类型的指针变量,存放的是整型变量(大小为4个字节)的地址,
而结果pc和pc+1的差值恰好就是1;pi和pi+1的差值恰好就是4

所以我就可以得出指针类型的第一个意义就是:

指针的类型决定了指针向前或者向后走一步距离有多大。

char类型的指针+1就向后走1个字节
int类型的指针+1就向后走4个字节
double类型的指针+1就向后走8个字节
…以此类推 减也是同样的道理

函数指针:(本质是一个指针,指向一个函数的指针)

指针函数:(本质是一个函数,函数的返回值是一个指针)

这个和数组指针,指针数组同理,我们只要看它后俩个字就能了解它的本质,从而更好的去应用它。

指针和变量的关系

在程序中我们可以通过指针变量来引用变量

	int a = 10;
	int *p;
	p = &a;
	*p = 100;
	printf("%d\n",a);
	printf("%d\n",*p);
	printf("%p\n",&a);
	printf("%p\n",p);

 如上所示,我们可以通过操作指针变量来给变量赋值,也可以进行运算等。

字节序

字节序,顾名思义,就是字节组织的顺序。我们可以将其根据其存储时从低位开始还是从高位开始分为两种,具体如下:

类型    简写    本质
大端    BE(big endian)    将高序字节存储在起始地址
小端    LE(little endian)    将低序字节存储在起始地址
这就是大小端序的含义,两者除了顺序上没有其他的区别,在性能上、功能上都是一样的。


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixiaxiao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值