OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8992|回复: 10

求助一个STM32中关于c语言的问题,谢谢;

[复制链接]

30

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2015-8-9
在线时间
0 小时
发表于 2015-9-8 09:43:01 | 显示全部楼层 |阅读模式
5金钱
小弟对c语音中的指针还是很模糊;现在把自己的一个理解写出来,请大家帮忙看看理解的对不对?
比如函数
[mw_shl_code=c,true]void arm_sin_cos_f32( float32_t theta, float32_t * pSinVal, float32_t * pCosVal)[/mw_shl_code]
里面的三个参数中,后边两个是带*的,分别为*pSinval和*pCosval,这两个参数是指针参数,也就是说将来调用此函数的时候,后边两个参数传入的应该是地址,对吗?(我理解的是指针即为地址),如果正确的话,那么*pSinval和*pCosval也就是代表地址了?但是在此函数内部,*pSinval和*pCosval并没有当做地址,而是当作这两个地址里面的内容了;如下代码所示:

[mw_shl_code=c,true] /* Calculation of sine value */ *pSinVal = y0 + y1; /* Calculation of cosine value */ *pCosVal = y2 + y3;[/mw_shl_code]

请问这是怎么回事呢?在函数入口的地方*pSinval和*pCosval代表要传入地址,但是内部,其二者却不是地址,pSinval和pCosval却变成了地址?

难道,在函数传入的时候,加*只是为了表示这是指针变量,需要传入地址?但是*pSinval和*pCosval并非地址?谢谢
请大家不吝赐教;谢谢

最佳答案

查看完整内容[请看2#楼]

float32_t * pSinVal ; 前面 加个 *是代表定义的变量是 指针变量 , 变量名是 pSinVal ,不是 *pSinVal  所以 pSinVal 表示的是地址 ,*pSinVal是那个地址上的数据
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
484
金钱
484
注册时间
2014-12-25
在线时间
83 小时
发表于 2015-9-8 09:43:02 | 显示全部楼层
float32_t * pSinVal ; 前面 加个 *是代表定义的变量是 指针变量 , 变量名是 pSinVal ,不是 *pSinVal  所以 pSinVal 表示的是地址 ,*pSinVal是那个地址上的数据
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3708
金钱
3708
注册时间
2011-5-23
在线时间
2010 小时
发表于 2015-9-8 09:50:06 | 显示全部楼层
但是内部,其二者却不是地址
在内部还是地址,并把运算结果存入这两个地址。

建议回炉重修C语言。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-9-8
在线时间
9 小时
发表于 2015-9-8 09:51:25 | 显示全部楼层
在声明变量的时候加*  表明是指针变量  pSinVal和pCosVal 是地址 *pSinval和*pCosval是内容
http://c.biancheng.net/cpp/html/72.html
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-9-8 15:07:38 | 显示全部楼层
分享一个我用的方法来记指针和所指变量的关系:
void arm_sin_cos_f32(float32_t theta, float32_t * pSinVal,float32_t * pCosVal)
这个函数有三个入参:
第一个是float32_t类型的变量,变量名为theta,也就是用float32_t 定义了一个名为theta的变量;
第二个入参这样理解 float32_t (*pSinVal),和第一个参数一样,可以理解为用float32_t定义了一个名为(*pSinVal)的变量,因为“*”是取值符,所以pSinVal就是指针,而这个(*pSinVal)整体就是变量。
第三个同上。
总结就是,pSinVal是指针,*pSinVal是变量。

这个仅是个人对这个问题帮助理解的方法,可能与C本质不同。
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2015-9-8 15:30:13 | 显示全部楼层
要修改外部的量,用指针是方法之一,不然只是局部变量操作了。
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复

使用道具 举报

30

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2015-8-9
在线时间
0 小时
 楼主| 发表于 2015-9-10 22:36:20 | 显示全部楼层
回复【4楼】ianhom:
---------------------------------
谢谢您的指点,感觉很受用,谢谢
回复

使用道具 举报

30

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2015-8-9
在线时间
0 小时
 楼主| 发表于 2015-9-10 22:37:40 | 显示全部楼层
回复【6楼】灼灼其华:
---------------------------------
谢谢您的指点,谢谢
回复

使用道具 举报

30

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2015-8-9
在线时间
0 小时
 楼主| 发表于 2015-9-10 22:40:13 | 显示全部楼层
回复【5楼】emWin:
---------------------------------
谢谢
回复

使用道具 举报

30

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2015-8-9
在线时间
0 小时
 楼主| 发表于 2015-9-10 22:40:29 | 显示全部楼层
回复【3楼】白齐聊:
---------------------------------
谢谢
回复

使用道具 举报

30

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2015-8-9
在线时间
0 小时
 楼主| 发表于 2015-9-10 22:40:40 | 显示全部楼层
回复【2楼】aozima:
---------------------------------
谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 06:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表