IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【C和指针】指针 -> 正文阅读

[嵌入式]【C和指针】指针

指针的概念:说的实用一点,指针就是地址。包括对指针的各种操作,就是对地址和变量之间的互相转换等操作(个人理解);

地址的概念:计算机的内存都是由0和1组成的。由于0和1只能表示两种情况。所以在使用时一般由8个bit构成一个字节。由字节来表示各种东西。

在这里插入图片描述

上面的每一个方框都表示一个字节(Byte),里面存储的我们定义的数据,方框上面的数字就是该变量的地址,当地址+1,就是往后移了一个字节。

我们为了存储更大数据,常常将好几个字节合在一起作为存储单位。如下图,用四个字节来表示一个整形(注意:一般情况下一个int是占用4个字节,但在51等的单片机中,int占2个字节)。一个整型有四个字节,如图占了100 101 102 103 四个字节,通常是由最左边的地址来表示该字节(即100)。
在这里插入图片描述

&和*运算符

&:取地址符号。效果是将a的地址取出来。
*:间接访问符。效果是将b地址的数据取出来。

&和*是一个相互的过程,一个是得到地址,一个是得到变量的值。
先来定义两个变量,假设a存储在100的地址里,b存储在104的地址里

int a=5int * b=&a;

以下需要仔细理解一下
根据上面的变量定义,可得到如下结果:

a的值为5;
b的值为100,b存储的是a的地址,同时b也是一个变量,只是这个变量存储的是地址而已;
*b的值为5,因为*是将b地址的数据取出来;
&a的值为100;
&b的值为104,因为b是存储在104的地址里的;
*a没有意义;
所以*b是一个变量,而不是地址,b才是地址。

下面看一个复杂的表达式:

*&a=5,它的意思是将5赋值给a,与a=5的效果一致(但是两者编译出来的文件区别很大)。

再重申一下
&和*是一个相互的过程,一个是得到地址,一个是得到变量的值。

简单分析一下*&a=5:&产生变量a的地址,它是一个指针常量。接着,*操作符访问其操作数所表示的地址

指针需要初始化
如下是错误的,会发生很多问题

int  *e;
*e = 5//可能会发生内存错误

指针占用的内存
你的机器是几位的,指针就占用多少位内存
如:char *i; int *j; double *k他们占用的内存是一样的,32位的MCU就占用32位,8位的就占用8位,64位的就64位

以下是常用的赋值操作

*b = 5*b = 100*b = a;b = &a;

b=a;//是错误的,变量不能直接赋值给地址

//定义两个新变量
int c=6int *d = &c;

则可以有:
b=d;//将d所存储的地址赋值给b,都是指针变量可以互相赋值
b=&c;
*b = c;

b=c;//是错误的

再看一下稍微复杂一点的:

*b++ = *d++;
该语句在数组中常见,将d地址存储数值(不是地址!!)赋值给b地址存储的数值,然后指向下一个地址。
等同于数组的操作:
a[0]=b[0];
a[1]=b[1];

a[2]=b[2];//指针加了几次,就往后赋值几次

对于地址++的操作需要说明:
int 类型的指针变量++后,地址增加了4字节(100->104)
unsigned char类型的指针变量++后,地址增加了1字节(100->101)
所以不同类型的指针++,地址的偏移量是不同的。需要根据变量类型的长度来计算

总结如下:指针与常规变量之间不能正常赋值。必须用&或*将双方统一成指针或地址,再进行赋值。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 13:00:11  更:2021-10-04 13:01:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:35:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码