指针的那些事儿

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言:

在C语言中指针是一个很重要的部分,下面由我简单介绍一下指针,希望

帮助大家的

一、内存和地址

1.1在讲之前先举一个例子,假设一共有100个房间,没有编号,把你朋友放到其中一个房间里面,你找到他只能通过一个一个房间里去找,会非常麻烦,如果把其中的房间编上号码,直接让他告诉你号码是不是一下子定位就找到了。

然而我们知道计算机在处理数据的时候会放在内存中读取,处理后的数据也放回内存中;其实也就相当于把内存分为一个内存单元,每个内存单元的大小取一个字节。

首先我们看一下计算机常见的单位

1 bit- 比特位                  1Byte=8bit

2 Byte- 字节                   1KB=1024Byte

3  KB                              1GB=1024MB

4  GB                              1TB=1024GB

5  TB                               1PB=1024TB

6  PB

每个内存单元相当于一个学生宿舍,一个字节能放8个比特位。

生活中我们把门牌号叫做地址,在计算机中把内存单元的编号也称为地址,在C语言中有一个新名字叫-指针

所以说:内存单元的编号==地址==指针

二、指针变量和地址

2.1取地址操作符(&)

#include <stdio.h>
 int main()
{
   int a=10;
   return 0;
}

列如上述代码就是创建整形变量a,内存中存放整数10,其中每个字节都有地址。

那我们该如何得到a的地址呢

#include <stdio.h>
int main()
{
int a = 10;
&a;//取出a的地址
printf("%p\n", &a);
return 0;
}

这样就可以打印了打印结果如下 

2.2.1指针变量

我们通过取地址操作符中拿到地址是一个数值,数值有时候也要存储起来,所以这个值放在哪里呢-当然是指针变量中

比如:

#include <stdio.h>
int main()
{
int a = 10;
int * pa = &a;//取出a的地址并存储到指针变量pa中
return 0;
}

指针也是一种变量,这种变量就是用来存放地址

那我们该如何拆解呢:*相当于pa是指针变量,int说明pa指向的是整形int 

2.2.2解引用操作符

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

第六行 就使⽤了解引⽤操作符, *pa 的意思就是通过pa中存放的地址,找到指向的空间,
*pa其实就是a变量了;所以*pa = 0,这个操作符是把a改成了0.
 

2.3指针变量的大小

如果指针变量是⽤来存放地址的,那么指针变量的⼤⼩就得是4个字节的空间才可以。

#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(char *));
printf("%zd\n", sizeof(short *));
printf("%zd\n", sizeof(int *));
printf("%zd\n", sizeof(double *));
return 0;
}

在x86环境下  

结论:32位平台下地址是32个bit位,指针变量⼤⼩是4个字节
           64位平台下地址是64个bit位,指针变量⼤⼩是8个字节
注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的
 

总结:今天我们认识了内存指针 算是有了一个初步的认识知道了指针是如何存放地址的,想要更加了解指针下一篇我们再展开学习

制作不易记得点赞谢谢大家

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值