关于嵌入式C语言指针的解析
出处:电子发烧友 发布于:2019-07-12 17:16:48
对于学习过指针的同学都知道,常数是不能直接幅值给指针的,如果想给指针幅常数,需要如下操作: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型数据的指针,赋值如下: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]为一数组指针,为一数组,每个元素为存放一个地址,赋值如下:int arry[3]={1,3,5};int (*data)[3]=&arry;那么*data就为个元素的地址,**data就为个地址所在的元素1。
那么person.pername[20]="jack"是不能通过的,究其原因就是结构体为抽象数据类型,不分配存储单元,所以数组赋值不通过。如果采用指针赋值,那么可以解决这类问题。
指向函数的指针在linux操作系统中很常见,现在拿个简单的例子来进行说明:int print(int a, int b ,char *p)
{ printf("in put number sum is %d,input string is %s\n",a+b,p);//三个参数,int int和char*
从上面这个例子中可以看出,一个函数其实就是从一个地址开始的特殊功能程序,其函数名就为该程序的首地址,所以可以这么给指针函数赋值:pprint=print;//给指针函数赋值
上一篇:关于嵌入式软硬件系统的工作原理
下一篇:什么是嵌入式系统?
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- EPS Global - 谁需要嵌入式安全?2024/4/22 15:39:31
- 什么是嵌入式SoC2024/4/3 16:20:28
- EasyARM-i.MX283(7)A 默认供电方案2024/3/28 17:39:53
- EasyARM-i.MX283(7)A 的快速入门2024/3/27 17:29:30
- 非线性数字滤波器:用例和示例代码2024/3/14 16:34:20