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

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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版