C语言定义函数形参是结构体指针,引用函数时参数用的是(&+结构体变量)

时间:2022-06-03 03:25:14
函数原型声明定义是:
void Init(MyTypeDef* adc)        //MyTypeDef  是结构体类型
{
}
引用时是: Init(&InitAdc);
MyTypeDef  InitAdc;   //MyTypeDef  是结构体类型

不太理解的是函数Init(MyTypeDef* adc)声明时形参怎么要带星号* ,以结构体指针类型来指定参数,可以解释下吗
多谢!

4 个解决方案

#1


形参的星号是指指针,就是结构体类型的指针,函数形参是一个结构体指针,实参也需要一个该结构体类型的指针,也就是要实参是一个地址传给形参;故在函数调用是使用的是&符号,就是区地址,将结构体变量的地址传过去。这样在函数里对于形参的修改就是对实参结构体变量的修改。

#2


Init需要的参数类型是指向这种结构体的指针类型,所以用*

调用时的&是取地址

#3


声明时,A *a表示a是指向A类型的指针,A &a表示a是A类型的引用;
调用时,*a表示取a指向的内容,&a表示取a的地址。

#4


引用 1 楼 cfjtaishan 的回复:
形参的星号是指指针,就是结构体类型的指针,函数形参是一个结构体指针,实参也需要一个该结构体类型的指针,也就是要实参是一个地址传给形参;故在函数调用是使用的是&符号,就是区地址,将结构体变量的地址传过去。这样在函数里对于形参的修改就是对实参结构体变量的修改。


其实我发帖提问的是,因为还看到有其它的函数 也是这样声明:
void func(MyTypeDef* adc)        //MyTypeDef  是结构体类型
{
 }

但是引用时却是 func(Initabc);   //MyTypeDef   Initabc;  
此处实参中无取地址符&

这是如何理解的?

#1


形参的星号是指指针,就是结构体类型的指针,函数形参是一个结构体指针,实参也需要一个该结构体类型的指针,也就是要实参是一个地址传给形参;故在函数调用是使用的是&符号,就是区地址,将结构体变量的地址传过去。这样在函数里对于形参的修改就是对实参结构体变量的修改。

#2


Init需要的参数类型是指向这种结构体的指针类型,所以用*

调用时的&是取地址

#3


声明时,A *a表示a是指向A类型的指针,A &a表示a是A类型的引用;
调用时,*a表示取a指向的内容,&a表示取a的地址。

#4


引用 1 楼 cfjtaishan 的回复:
形参的星号是指指针,就是结构体类型的指针,函数形参是一个结构体指针,实参也需要一个该结构体类型的指针,也就是要实参是一个地址传给形参;故在函数调用是使用的是&符号,就是区地址,将结构体变量的地址传过去。这样在函数里对于形参的修改就是对实参结构体变量的修改。


其实我发帖提问的是,因为还看到有其它的函数 也是这样声明:
void func(MyTypeDef* adc)        //MyTypeDef  是结构体类型
{
 }

但是引用时却是 func(Initabc);   //MyTypeDef   Initabc;  
此处实参中无取地址符&

这是如何理解的?