读书人

下部两个函数分别采用了什么方式传递参

发布时间: 2013-04-26 16:27:53 作者: rapoo

下面两个函数分别采用了什么方式传递参数的?地址还是值

#include <stdio.h>

void display(struct persons *p);

struct names {
char firstname[20];
char middlename[20];
char lastname[20];
};

struct persons{
int number;
struct names name;
};

struct persons person[5] = {
{302039823,{"Dribble","Mackede","Flossie"}},
{345345345,{"gadenfs","Kasdfas","Pszajkh"}},
{302039823,{"Kazsdfj","Aasdfaf","Mjasdfh"}},
{302039823,{"Qaadsef","","Yjsjdsh"}},
{302039823,{"Bsdsdfs","Fsjdsdd","Rshdsdf"}}
};

int main(void)
{
display(person);
return 0;
}

void display(struct persons *p)
{
int i;
for(i=0; i<5; i++)
if (p[i].name.middlename[0] != '\0')
printf("%s, %s %c. -- %d\n",p[i].name.firstname, p[i].name.lastname, p[i].name.middlename[0], p[i].number);
else
printf("%s, %s -- %d\n",p[i].name.firstname, p[i].name.lastname, p[i].number);
}


#include <stdio.h>

void display(struct persons *p);

struct names {
char firstname[20];
char middlename[20];
char lastname[20];
};

struct persons{
int number;
struct names name;
};

struct persons person[5] = {
{302039823,{"Dribble","Mackede","Flossie"}},
{345345345,{"gadenfs","Kasdfas","Pszajkh"}},
{302039823,{"Kazsdfj","Aasdfaf","Mjasdfh"}},
{302039823,{"Qaadsef","","Yjsjdsh"}},
{302039823,{"Bsdsdfs","Fsjdsdd","Rshdsdf"}}
};

int main(void)
{
display(person);
return 0;
}

void display(struct persons *p)
{
int i;
for(i=0; i<5; i++)
if (p[i].name.middlename[0] != '\0')
printf("%s, %s %c. -- %d\n",p[i].name.firstname, p[i].name.lastname, p[i].name.middlename[0], p[i].number);
else
printf("%s, %s -- %d\n",p[i].name.firstname, p[i].name.lastname, p[i].number);
}

[解决办法]
你这是一个程序啊,传的是地址啊。
[解决办法]
其实在调用函数与被调用函数之间传递的仍然是值,只不过当实参是数组名的时候,传递给形式参量的值是一个地址,即形式参量得到了作为实参数组起始地址的一份拷贝,只有形式参量被申明为引用类型的时候,在调用函数与被调用函数之间发生的才是传址。
  而你如果想传递结构变量的值的话,可在主函数中使用循环:
  for(i=0;i<5;i++)
display(person[i]);
这样的话,在调用函数与被调用函数之间传递的将是结构变量的值,即形式参量得到的将是实参结构变量的一份值的拷贝。当然你的被调函数的申明与定义(包括函数体)就要进行相应的修改:
  void display(struct persons temp);//函数原型
void display(struct persons temp) //函数定义
{
输出成员;
   }

读书人网 >C语言

热点推荐