【C语言入门】指针

【C语言入门】指针

十五、指针

1 数据在电脑中的存储

电脑上产生的数据可以存放到哪里?

存储位置存储大小
寄存器几个字节
缓存几十MB
内存8G/16G/32G
硬盘50G/1T
网盘2T

说明:上述表格,从下到上,存储空间变小、读取速度变快、实际造价变高


2 内存分区(大致)

内存区域使用形式使用者
栈区进入作用域创建,出作用域即被销毁局部变量、形式参数等临时作用的变量
堆区动态内存分配malloc / calloc / realloc / free
静态区程序运行前创建,直到程序结束后才被销毁全局变量、静态变量


3 内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的

3.1 内存单元

内存单元:为了能有效且合理地使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小是1个字节

地址编号:为了能够有效地访问到(找到)内存中的每个内存单元,就对每个内存单元进行编号,这些编号就被称为该内存单元的地址编号
在这里插入图片描述


3.2 内存的分配

变量是创建在内存中的(在内存中分配空间),每个内存单元都有地址,变量也是有地址的,通过对变量取地址能够找到这段内存空间

代码示例

#include<stdio.h>

int main()
{
	int num = 10;
	&num;//取出num变量的地址

	printf("&num = %p\n", &num);//打印地址,%p是以地址的形式打印
	return 0;
}

解释说明

1 int num = 10;

​   变量的创建就是向内存申请空间。此句代码表示向内存申请4个字节的内存空间,存放10这个值。

2 &num;

​   意思是取出变量 num 的地址, int 型变量 num 占用四个字节大小的空间,而一个地址对应一个内存空间(1字节大小)

​   所以取出的是第一个字节的地址,也就是地址较小的那个内存空间的地址

3 %p转换说明,此处用来打印地址。(以十六进制的形式打印地址

图示说明
在这里插入图片描述


4 指针变量

指针变量用来存放地址。不同类型的地址,需要对应类型的指针变量来存储。

4.1 示例

#include<stdio.h>

int main()
{
	//指针变量
	int num = 20;
	int* p = &num;
	*p = 100;//*p相当于num

	printf("%d\n", num);//100

	return 0;
}

解释说明

1 int* p = &num;

​   创建一个指针变量 p ,存放变量 num 的地址。也可以说是指针 p 指向了整型变量 num

2 *p = 100;

​   对指针变量进行解引用*p 可以看做是是 num 的一个别名。相当于:num = 100;

图示说明

在这里插入图片描述

在这里插入图片描述


4.2 其他类型的指针变量

代码示例

#include<stdio.h>

int main()
{
	//字符型指针变量

	char ch = 'a';
	char* pc = &ch;
	*pc = 'q';

	printf("%c\n", ch);//q

	return 0;
}

解释说明

1 指向字符型变量的指针变量称为字符指针


4.3 指针变量的大小

指针变量的大小取决于地址的大小。

4.3.1 地址线

地址线是用来传输地址信息的。

​   一根地址线确定一个存储单元,所有地址线上的可能取值的所有组合确定了存储单元的个数。

​   一根地址线有高低电平的电信号,转换成数字信号就是 0/1

​   32位机器上就有32根地址线,那么能确定 2^32 个地址,就能对应 2^32 的内存单元,也就可以访问 2^32 个字节的内存空间,即4GB。

​   64位机器上就有64根地址线,那么能确定 2^64 个地址,就能对应 2^64 的内存单元,也就可以访问 2^64 个字节的内存空间,即8GB


4.3.2 指针变量的大小

计算指针变量的大小就是计算指针变量所占内存空间的大小

代码示例:

include<stdio.h>

int main()
{
    //指针变量的大小

	//X86/X64  --  32/64
	printf("%d\n", sizeof(char*));	//4/8
	printf("%d\n", sizeof(short*)); //4/8
	printf("%d\n", sizeof(int*));	//4/8
	printf("%d\n", sizeof(double*));//4/8

	return 0;
}

解释说明:

1 32位平台下地址占用32个bit位(即4个字节)

2 64位平台下地址占用64个bit位(即8个字节)


4.3.3 结论

指针变量的大小在32位平台是4个字节在64位平台是8个字节


总结:

  本节简单介绍了内存与内存分区;简单说明了什么是指针变量;最后给出了不同平台下的指针变量的大小。


感谢您的阅读!如有任何错误,欢迎您的批评指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值