🎀 文章作者:二土电子
🐸 期待大家一起学习交流!
PS:本人之前对于指针的了解基本为0,更是没有实际使用过指针,后来在开发中学习到了利用指针在固定地址读取或者写入数据的方法,以及利用指针提取数组的方法,这里简单分享一下,手法可能有些粗陋,如果有大佬有其他方法欢迎留言交流。
1 利用指针读取单个数据
这里依旧是惯例,直接上代码。
int *ptest = (int*)0x20010800; // 定义一个指针,指向需要操作的地址
int test = 0; // 定义一个变量,用来读取操作地址的值
test = *(ptest); // 读取ptest指向地址的值
上述程序需要注意的是指针变量的类型需要和要读取的数据类型相同。其次如果只是需要做判断的话可以直接像下面这样写。
if (*(ptest) > 10) // 判断条件
{
// 需要执行的内容
}
2 利用指针读取数组
利用指针读取数组的应用场景一般是只知道数组的首地址和长度的情况,比如说利用DMA将一些数据搬运到SRAM区的某个地方,只知道首地址和长度需要读取出来。
假设数组首地址为0x20010800,长度为200,数据类型为int型,现在需要将这200个数据读取出来,程序如下。
int *ptest = (int*)0x20010800; // 需要读取的数组的首地址
int a[200]; // 用来存储读取到的200个数的数组
int i = 0; // 循环变量
for (i = 0;i < 200;i ++)
{
a[i] = *(ptest + 1);
}
这里加1的含义是从首地址往后32位的下一个地址,具体是几位与指针类型有关。如果指针为16位,那么加1就代表往后推16位,指针为8位,加1就代表往后推8位。
3 利用指针往固定地址写入值
说完了如何利用指针读取数据和数组,接下来说一下如何利用指针往固定地址写入值,程序如下。
int *ptest = 0x20010800; // 指向要操作的地址的指针变量
*ptest = 10; // 往需要操作的地址写入值
指针虽好,但是实际应用时很可能会出现问题,尤其是把指针当作返回值时,所以大家在使用指针时还是要考虑到它可能带来的风险。