嵌入式C语言——指针(1)

一、指针概述

1、指针定义

指针是寻找内存类型资源地址、门牌号的代名词

指针变量是存放指针这个概念的盒子

eg:int a;

a就叫作整型类型的变量。定义了一个int大小的盒子(当前主流的编译器和系统,int类型通常占用4个字节的存储空间)

2、思考问题

C语言编辑器对指针这个特殊的概念,有两个问题?

看到*p就要想到以下两个问题:

1、分配一个盒子,盒子要多大?

盒子大小要能容纳内存地址最大容量。

在32位系统中,盒子的大小是4个字节,在64位系统中,盒子的大小是8个字节

盒子有了,第二步就是如何用这个盒子,就比如在32位系统中,定义一个指针去读取地址,是读取1B,还是4B呢,所以很容易想到第二个问题。

2、盒子里存放的地址所指向内存的读取方式是什么?

当程序通过指针变量Indirectly访问所指向的内存时,编译器需要根据指针类型生成正确的内存访问代码。比如指针p指向一个int变量,那么*p表示访问p所指向内存中实际的int变量。编译器会根据int的大小和系统访问内存的方式,生成加载或存存储位于p中的地址处的整数值的具体机器码。

简单来说当我们定义了char *p,就告诉编译器一次性只读一个字节。int *p就是4个字节等等。

二、举例说明

int n = 10;
int* p = &n; 

printf("%d", *p);

这里有一个int变量n,和一个指向n的int指针p。

编译器处理这个代码的主要步骤是:

1. 为整数变量n在内存中分配4个字节空间(假设int为4字节)

2. 为指针变量p在内存中分配足够存储一个地址的空间,比如4字节或8字节

3. 将n的地址赋值给指针变量p

4. 当遇到*p时,编译器了解p是个int指针,需要读取p中的地址所对应的内存

5. 根据int的大小是4字节,编译器生成加载存储在p中的地址处4个字节整数值的机器指令

6. 最后这4个字节的值就是n的值10,被打印输出所以编译器是通过指针类型,指针所指向变量的大小,以及系统的内存访问方式,来生成正确的读取指针所指向内存的机器代码的。这就实现了指针间接访问内存的机制。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值