内存和指针

        在日常生活中,相信大家对内存和指针都很熟悉了,如果你还没有很懂,那么就让我来为你讲述下内存和指针所存在的关系。

1.内存

        其实内存就像一栋楼房,内存会首先被划分为一个个的内存单元,被划分出来的内存单元就像是一个个的房间,然后,我会对内存单元进行编号,也就相当于我们生活中的门牌号。一个内存大小是一个字节,那么为什么不用其他单位来度量一个内存的大小呢?我们知道,内存单元的大小从小到大依次是比特位、字节、KB、MB、GB、TB、PB...这里以int类型的变量举个例子,int类型的变量需要用到4个字节也就是32个比特位,如果用比特位度量则需要很大的空间,而KB等与1024个字节,显然它对与存储int类型的变量过大了,因此我们使用字节来度量内存单元的大小。32位机器的一个地址能够管理2^32字节的空间,推理可知64位的机器能够管理2^64字节的空间。

2.指针

    讲完了内存,大家肯定对指针产生了好奇,那么指针到底是什么呢?其实指针就是刚才我们讲过的内存单元的编号,指针也叫地址。下面我们通过一段代码来了解指针:

int main()
{
	int a=10;
	int* pa = &a;	//创建指针变量,指针就是地址,地址就是指针,int*表明指针变量pa指向的a类型是int
	printf("%p", pa);//pa用来存放a的地址,%p专门用来打印地址
    return 0;
}

运行结果如图:

读取内存中的数据得:

通过10进制和16进制间的换算,可得上述结论正确--指针就是地址,地址就是指针。

下面我们将利用pa来修改a的值:

#include <stdio.h>	
int main()
{
	int a=10;
	int* pa = &a;	//创针变量,指针就是地址,地址就是指针,int*表明指针变量pa指向的a类型是int               
    	*pa = 20;	//解引用操作符--通过pa指向a,*pa就是a
	    printf("%d", a);
	    return 0;
}

运行代码:

3.指针变量的大小

  

int main()
 {   
    printf("%d", sizeof(long long*));
	printf("%d", sizeof(long*));
	printf("%d", sizeof(int*));
	printf("%d", sizeof(char*));
	printf("%d", sizeof(short*));
	return 0;
}

代码运行结果:

这是64位机上的显示,下面我们看看32位机上的显示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值