C语言的指针(1)

C语言的指针(1)

指针的由来

内存地址的定义

类似去快递点取快递,需要地址和取件码并得到快递员的确认才可以拿到需要的物品,当想要在内存中拿到你想要的变量值时,便需要得到存放此变量的**内存地址**;

那么何为内存地址?

抽象化的可以理解为:内存按照大小可以划分为一个又一个的单元格,对,就像Excel里的单元格一样,他们大小相同,按照顺序排列,(老师是这里抽象化的)32位系统的一个内存单元为4字节64位系统的单元内存8字节
就在这样的“单元楼”内,存在着32跟地址线,(这里以32位系统为例),以其正电负电的状态表示二进制的0,1组合。那么32跟地址线便存在

0000 0000 0000 0000 0000 0000 0000 0000
  |    |    |   |    |    |    |     |
1111 1111 1111 1111 1111 1111 1111 1111 

共2的32次方种组合
同理,每一个内存单元便用这2的32次方中的一员来表示其地址。
后来为了方便表示 内存地址均用16进制来表示:
0x0000~0xFFFF 来表示其内存范围;

怎样对变量进行取用

当我们定义一个整型变量时, 系统便会为我们开辟一个4字节的空间用来存储这个变量,由上文可知,这个字节存贮的内存单元有其地址所在,当我们想要再次访问存在这个地址变量时,就有两种途径:
1.通过定义时的名字来取出其值;
int a = 0;
2.通过存放其值的地址编号来找到这个值,进而取用它;
这就是用到了指针------可以叫它存放地址的变量

指针变量的使用

存放内存地址的变量成为指针变量,其形式见下面代码

#include<stdio.h>
int main(){
	int a = 5;
	int* pa = &a;
	printf("%d",a);
	printf("%p",&a);
	printf("%p",pa);
	printf("%d",*pa);
	return 0}

这里可以看到的是 a的值和 通过地址找过去(解引用 *pa)的值 一致!
a的地址和pa指针中存的地址 一致!

指针变量的书写格式:
存放变量的类型* (空格) 指针变量名 = (&变量名);

在这里插入图片描述
可以看到内存地址取得是小地址 ,且连续排列的
图中 int a 占四个字节 但其地址为初始的小地址作为其地址编号:
05 00 00 00 对应地址 0x0057FA60
61 62 63 64 下一个地址对应着 0x0057FA65
可证:地址连续

所有的32位系统其指针类型大小都是4字节
在这里插入图片描述

#include<stdio.h>
int main() {
	printf("%p \n", sizeof(int*));
	printf("%p \n", sizeof(char*));
	printf("%p \n", sizeof(double*));
	printf("%p \n", sizeof(float*));
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值