嵌入式C语言的指针使用总结

2019-07-18 10:04:16 来源:21ic
标签:
C语言作为嵌入式开发的基础语言已经越来越让工程师们知道它的厉害:可以直接操控寄存器,方便CPU的功能设置;可以直接操作物理地址,并进行位的操作进而达?#25509;?#20214;的操作等等。如果你用8位16位单片机进行开发学习,相信使用一些程序技术可以完成设计:循环、选择、位操作、条件判断、数组?#32479;?#24207;嵌套等。如果你进行操作系统,关注操作系统的内核(以linux为例),你就会发现这些C语言?#30631;?#20013;的一小部分。对于操作系统来说更多运用到指针,?#31185;?#21407;因,一个很重要的原因就是处理速度快。那么,今天我就把C语言的指针做个总结。
 
对于学习过指针的同学都知道,常数是不能直接幅值给指针的,如果想给指针幅常数,需要如下操作:int num=8;int *pnum=#这时我们需要注意,pnum指向8存储的地址,*pnum为该地址存储的数据8。
 
指针和数组有着天然的联系,其实数组就是一个连续地址存放着常数,我们看下面一个例子:int arry[3]={1,3,5};那么arry就是该数组的首地址,*arry就是该数组首地址存放的数据1,*(arry+1)则为该数组的第二个位置存放的数据3.
 
从以上分析可以看出:*arry和arry[1]同样指向该数组的首个元素。
 
那么可以在进一步延伸,如下:a 、int *data[3] 为指针数组,数组中每个元素为一个指向int型数据的指针,赋?#31561;?#19979;:int arry[3]={1,3,5};int *data[3]={arry,arry+1,arry+2};data[0]为指向arry首地址,*data[0]为该地址存放的数据1。data为data数组的首地址,*data和data[0]都为数组arry的首地址。其实也可以说定义了三个数组 data[0], data[1]和data[2]。
 
关于嵌入式C语言指针的解析
 
b、int(*data)[3]为一数组指针,为一数组,每个元素为存放一个地址,赋?#31561;?#19979;:int arry[3]={1,3,5};int (*data)[3]=&arry;那么*data就为第一个元素的地址,**data就为第一个地址所在的元素1。
 
那么person.pername[20]="jack"是不能通过的,?#31185;?#21407;因就是结构体为抽象数据类型,?#29615;?#37197;存储单元,所以数组赋值不通过。如果采用指针赋值,那么可?#36234;?#20915;这类问题。
 
指向函数的指针在linux操作系统中很常见,现在拿个简单的例子来进行说明:int print(int a, int b ,char *p)
 
{ printf("in put number sum is %d,input string is %sn",a+b,p);//三个参数,int int和char*
 
从上面这个例子中可以看出,一个函数其实就是?#21491;?#20010;地址开始的特殊功能程序,其函数名就为该程序的首地址,所以可以这么给指针函数赋值:pprint=print;//给指针函数赋值。
 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
可预置可逆4位计数器设计
可预置可逆4位计数器设计

利用AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,用来指示当前计数的数据;用P1.4-P1.7作为预置数据的输入端,接四个拨动开关K1-K4,用P3.6/WR和P3.7/RD端口接两个轻触开关,用来作加计数和减计数开关。

基于Windows CE.net操作系统的数控雕刻机控制系统设计
基于Windows CE.net操作系统的数控雕刻机控制系统设计

随着科学技术和制造技术的不断发展进步,数字控制的雕刻机渐渐成为雕刻行业的专用工具。数控雕刻机从加工原理上?#24425;?#19968;种钻铣组合加工,是一?#20540;?#22411;的机电一体化产品,在模具雕刻、广告制作、装潢等行业有着广泛的市场应用。

干货 | 一文搞懂单片机应用程序架构

对于单片机程序来说,大家都不?#21543;?#20294;是真正使用架构,考虑架构的恐怕并不多,随着程序开发的不断增多,本人觉得架?#25925;?#38750;常必要的。

嵌入式必备工具推荐,让工作事半功倍

嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有μcos,vxworks,linux,android等。

单片机中开平方的方法

C语言中开平方的算法中要开平方的话,可以在头文件中加#include 。然后调sqrt(n);函数即可。但在单片机中要开平方。可以用到下面算法: 算法1: 本算法只采用移位、加减法、判断和循环实现,因为它不需要浮点运算,也不需要乘除运算,因此可以很方便地运用到各种芯片上去。 我们先来看

更多资讯
华为正式发?#24049;?#33945;系统,果真?#25925;?#20026;物联网打造的系统

8月9日消息,华为在东莞松山湖基地举行开发者大会,华为消费者业务CEO余承东在大会上正式向全球发?#35745;?#20840;新的基于微内核的面向全场景的分布式操作系统: 鸿蒙OS。

苹果将在9?#36335;?#25512;送iOS 13,新特性一览
苹果将在9?#36335;?#25512;送iOS 13,新特性一览

目前所有 iPhone、iPad和iPod Touch设备中,有88%已经升级至 iOS 12,而还有7%运行的是iOS 11,5%运行的早期版本的iOS。

华为鸿蒙即将在华为开发者大会上亮相,自研操作系统真的?#20449;?#22836;吗?
华为鸿蒙即将在华为开发者大会上亮相,自研操作系统真的?#20449;?#22836;吗?

从华为官方的介绍来看,鸿蒙?#23548;?#19978;是一款面向物联网的操作系统,华为还希望让它全面兼容和覆盖自动驾驶、工业自动化以及智能家居硬件等领域。

日本忧?#25311;?#24545;:人工智能方面已落后

据外媒报道,日本公司和政府内部都弥漫着一种恐慌感,因为这个世界第三大经济体没有足够的人工智能人才。

如何制作Linux SD系统启动卡?
如何制作Linux SD系统启动卡?

SD卡启动是开发板系统启动方式的一种。SD系统启动卡共有boot分区、rootfs分区和rootfs-backup分区三个分区,其中boot分区为FAT32格式、rootfs分区和rootfs-backup分区为EXT4格式。

王牌战士什么时候开服
中特期期准 靠pk10赚钱的人 极速赛计划软件万能码 山东群英会中奖规则 内蒙古时时开奖视频 360新时时 快乐赚ip已注册 秒速时时计划专家 江西时时倒闭 15选5开奖