你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

vodi 函数(u32 *a)里的*a是要往函数输入什么?

[复制链接]
wrdt24435 提问时间:2018-8-25 17:34 /
请教各位这个函数输入量的意思是什么?
意思是u32类型的*p吗? 在例程里输入的是 u32 a[n]; 这么定义的数组,而且使用该函数时是 函数(a) 这样输入,
另外函数里 *a++意思是指针地址+1? 例程里输入的都是上述的数组,*a++在例程执行出来的意思相当于是a[x+1]的值

收藏 评论14 发布时间:2018-8-25 17:34

举报

14个回答
zcl201207 回答时间:2018-8-25 18:48:24
最好的老师是实践,就是做实验看结果。。。
feixiang20 回答时间:2018-8-25 22:18:45
描述得有点难理解 ...

你的意思 void fn(u32 *a); 数据中的a是输入什么数据是么? 如果是这样, 那a就要输入一个u32型的指针地址, 如:
u32 val = 0;
fn( &val);

*a++, 取值运算符与自增运算符同级, 自右向左结合, 所以先自增后取值; "*a++在例程执行出来的意思相当于是a[x+1]的值"明白你的意思, 应该是对的!

评分

参与人数 2ST金币 +1 蝴蝶豆 +2 收起 理由
zero99 + 2
wrdt24435 + 1 感谢

查看全部评分

stm1024 回答时间:2018-8-27 08:20:54
*a++意思是指针地址+1

这种说法没错但是不太准确,严格意义上来说,是按其类型递增相应的位数。例如原来的地址是0x0004,如果你是uint8_t*的指针类型,那么递增以后地址就是0x0005,如果是uint32_t,递增以后是0x0008,递增了一个类型所占据的字节数

点评

感谢  发表于 2018-8-27 13:32

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

sincomaster 回答时间:2018-8-27 08:50:43
stm1024 发表于 2018-8-27 08:20
这种说法没错但是不太准确,严格意义上来说,是按其类型递增相应的位数。例如原来的地址是0x0004,如果你 ...

stm1024大神,我怎么觉楼主说的没错呢?楼主说的是指针地址+1,指针已经指定数据类型为u32 *了,这样地址+1就是跳转4个或8个字节了,让大神见笑了,

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

stm1024 回答时间:2018-8-27 09:20:13
sincomaster 发表于 2018-8-27 08:50
stm1024大神,我怎么觉楼主说的没错呢?楼主说的是指针地址+1,指针已经指定数据类型为u32 *了,这样地址+1就 ...

大神不敢当,我也只是想说明一下观点,就是指针不一定是按一个字节往前跑的
wrdt24435 回答时间:2018-8-27 13:05:01
zcl201207 发表于 2018-8-25 18:48
最好的老师是实践,就是做实验看结果。。。

原理不知道的话,做实验只能依葫芦画瓢那样仿照着例程,感觉这样就不能灵活使用了。
wrdt24435 回答时间:2018-8-27 13:25:06
feixiang20 发表于 2018-8-25 22:18
描述得有点难理解 ...

你的意思 void fn(u32 *a); 数据中的a是输入什么数据是么? 如果是这样, 那a就要输 ...

看了各位回复,首先u32型指针地址指的是4个地址的值意思吧?比如地址0x0000到0x0003的值是1,2,3,4,u32型指针能指向0x01020304的值
1. 那要怎么指呢?也就是u32 *p=什么?是0x0000吗?
2. 其次也就是说数组a其实是指针地址,而a[x]则是一个变量,那么比如我想往void fn(u32 *a)这个函数输入a[2],是(u32 *)&a[2]这样输入吗?
3. 为什么我用const u32 a[n]定义的数组输入函数里编译会报错,是因为const u32和u32类型不一样需要强制类型转换?
表达的不清楚请见谅,有些地方不知道用什么词汇好。
wrdt24435 回答时间:2018-8-27 13:32:18
stm1024 发表于 2018-8-27 09:20
大神不敢当,我也只是想说明一下观点,就是指针不一定是按一个字节往前跑的 ...

看了各位回复,首先u32型指针地址指的是4个地址的值意思吧?比如地址0x0000到0x0003的值是1,2,3,4,u32型指针能指向0x01020304的值
1. 那要怎么指呢?也就是u32 *p=什么?是0x0000吗?
2. 其次也就是说数组a其实是指针地址,而a[x]则是一个变量,那么比如我想往void fn(u32 *a)这个函数输入a[2],是(u32 *)&a[2]这样输入吗?
3. 为什么我用const u32 a[n]定义的数组输入函数里编译会报错,是因为const u32和u32类型不一样需要强制类型转换?
表达的不清楚请见谅,有些地方不知道用什么词汇好。
sincomaster 回答时间:2018-8-27 16:37:21
wrdt24435 发表于 2018-8-27 13:32
看了各位回复,首先u32型指针地址指的是4个地址的值意思吧?比如地址0x0000到0x0003的值是1,2,3,4,u32型 ...

楼主对指针的基础知识还不是很扎实啊,在多去看看
2018-08-27_162700.jpg

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版