找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6313|回复: 12
打印 上一主题 下一主题
收起左侧

stm32 C语言void函数(u32 *a)里的*a是要往函数输入什么?

  [复制链接]
跳转到指定楼层
楼主
ID:382526 发表于 2018-8-25 17:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位这个函数输入量的意思是什么?意思是u32类型的*p吗? 在例程里输入的是 u32 a[n]; 这么定义的数组,而且使用该函数时是 函数(a) 这样输入,
另外函数里 *a++意思是指针地址+1? 例程里输入的都是上述的数组,*a++在例程执行出来的意思相当于是a[x+1]的值

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:389982 发表于 2018-8-25 17:54 | 只看该作者
可以传入一个u32类型的指针变量。如果传入一个u32类型的数组名,实质上是传入了指向该数组第一个元素的指针。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:388197 发表于 2018-8-26 09:20 | 只看该作者
a++意思是对应数据类型的地址加1,如同a[x+1],使用时要注意,不要超出范围导致野指针

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:385318 发表于 2018-8-26 09:50 | 只看该作者
指针变量
回复

使用道具 举报

5#
ID:388986 发表于 2018-8-26 13:49 | 只看该作者
可以输入一个指针型变量
回复

使用道具 举报

6#
ID:390151 发表于 2018-8-26 14:57 | 只看该作者
输入一个u32类型的指针变量,如果定义了数组a[n],可以将数组a[n]的首地址a(或&a[0])传入,*a就指向了首地址里的内容

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:319192 发表于 2018-8-26 16:19 | 只看该作者
首先,void func(u32 *a)这个函数的形参是u32 *a,那么a是一个u32类型的指针变量。需要传入一下u32类型的地址。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:391108 发表于 2018-8-29 11:17 | 只看该作者
1.0地址而且是一个无符号32位的数据的地址;2.0输入的为a就可以或者&a【0】都代表数组的首地址;3.0*a++这个你要注意是先自加还是先给地址

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:391189 发表于 2018-8-29 14:17 | 只看该作者
指针变量啊!
回复

使用道具 举报

10#
ID:391190 发表于 2018-8-29 14:32 | 只看该作者
a是数组指针,*a++是u32这个值加1, a++指数组索引加1及指向下一个u32数,地址是增加了sizeof(u32)的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:391468 发表于 2018-8-30 09:55 | 只看该作者
指针变量,传地址
回复

使用道具 举报

12#
ID:391468 发表于 2018-8-30 09:56 | 只看该作者
指针变量,传地址
回复

使用道具 举报

13#
ID:390775 发表于 2018-8-31 16:09 | 只看该作者
你先看我写的代码然后  再去理解你写的就好理解了
定义一个整型数组   int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
定义一个返回值为空的想用数组做形参的函数  
//void fun(int a[10])--------(才开始学c语言是的写法)
//void fun(int a[]) ----------(学习一段时间后的写法)
void fun(int *a) ----------(最常用的写法   一般一维数组做函数参数是  编译器内部会把  形参 转化为指针,  因此我们如果要用一维数组做形参    一般都会直接写成指针形式)
{  函数体   }

PS:  如果你以后接触到二维数组做形参时  可能会这样写:
        void   fun(int  a[常量][常量])    void fun(int a[][常量])   或 void  fun(int (*a)[常量]) 三种形式
        因为  数组要考虑步长问题 所以 会退化为数组指针
       而指针数组  char *str[]  = { "1111", "2222"};  做形参时
        void  fun(char  *str[])    和  void fun(char **str)  两种形式
   
然后再看你的   void函数(u32 *a)  首先 u32应该是数据类型(一般 u32 是无符号 32位整型)
    u32 *a    应该是  一维数组做函数参数(形参)  传入的是  数组 首元素地址;
    注意:  还有一种情况   就是 想通过形参  去改  实参的值 (这得根据 你的代码具体来看)  因为 指针存在的最大意义就是间接赋值。

另外函数里 *a++意思是指针地址+1?
u32 p = u3常量;定义了一个变量
u32 *a = NULL; a = &p   定义了一个指针变量   并指向p(把p的地址赋给a) a++ 相当于地址加了一个(u32 类型所占内存的字节)数。 而*a++;  是对 a 该内存的值进行加1(也就是p加1);
  希望 对你有帮助  还有不理解的地方  可以继续问我哦
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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