900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > c语言结构体作为形参是否加struct_(struct)结构体变量作为函数参数调用的方法小结...

c语言结构体作为形参是否加struct_(struct)结构体变量作为函数参数调用的方法小结...

时间:2020-06-24 09:04:13

相关推荐

c语言结构体作为形参是否加struct_(struct)结构体变量作为函数参数调用的方法小结...

结构体变量作为函数参数传递的3种方法将一个结构体变量中的数据传递给另一个函数,有下列3种方法:用结构体变量名作参数。一般较少用这种方法。用指向结构体变量

结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析

struct stud

{

long int num;

float score;

};

void funvr(struct stud t)

{

t.num=2000101;

t.score=71.0;

}

void funar(struct stud t[])

//void funar(struct stud &t)

{

t[0].num=3000101;

/*注意结构体数组元素的成员的引用形式*/

t[0].score=81.0;

t[1].num=3000102;

t[1].score=82.0;

}

void funpr(struct stud *t)

{

t->num=4000101;

/*注意通过结构体指针变量引用成员的具体形式*/

(*t).score=92.0;

}

/*在主函数中分别调用上述函数修改成员值,再验证结果的正确性*/

#include

struct stud

{

long int num;

float score;

};

void funvr(struct stud t)

{

t.num=2000101;

t.score=71.0;

}

void funar(struct stud t[])

//void funar(struct stud &t)

{

t[0].num=3000101;

/*注意结构体数组元素的成员的引用形式*/

t[0].score=81.0;

t[1].num=3000102;

t[1].score=82.0;

}

void funpr(struct stud *t)

{

t->num=4000101;

/*注意通过结构体指针变量引用成员的具体形式*/

(*t).score=92.0;

}

void main()

{

struct stud a[2]={

{1000101,61.0}, {1000102,62.0}

};

struct studb=a[0],*p;

printf("old b: b.num:%ld\tb.score:%f\n",b.num,b.score);

/*显示结构体变量b的成员的原有值*/

funvr(b);

/*验证第一种情况,观察并分析结果,看结构体变量作为函数参数时,形参结构体变量成员的值的改变能影响实参结构体变量的成员的值,

以下为输出调用函数funvr(b)之后的结果值*/

printf("call funvr() new b: b.num:%ld\tb.score:%f\n ",b.num,b.score);

funpr(&b);

/*将结构体变量的指针对作为函数的参数*/

printf("call funpr() new b: b.num:%ld\tb.score:%f\n ",b.num,b.score);

/*输出结构体数组a元素的原来的成员值*/

printf("old a[0]:a[0].num:%ld\ta[0].score:%f\n ",a[0].num,a[0].score);

printf("old a[1]:a[1].num:%ld\ta[1].score:%f\n ",a[1].num,a[1].score);

/*将结构体数组a作为函数的参数,然后再输出其元素的成员的值,已经被修改了*/

funar(a);

printf(" new a[0]:a[0].num:%ld\ta[0].score:%f\n ",a[0].num,a[0].score);

printf("new a[1]:a[1].num:%ld\ta[1].score:%f\n ",a[1].num,a[1].score);

}

【结构体参数调用归纳】

3)结构体变量可作为函数的参数,函数可返回一结构体类数据

4)p=&b; 使结构体指针变量p指向结构体变量b的空间。

p->num:表示通过指针变量引用结构体变量b的成员num

①p->num:表示通过指针变量引用结构体数组元素的成员num的值。

②p->num++:表示通过指针变量先引用结构体数组元素的成员num的值,再使该元素的成员num的值加 1,先引用其值然后其加1。

③++p->num:表示使指向的元素的成员num的值加1,,再引用其值。

6)p=a;或p=&a[0];表示将结构体指针变量p指向结构体数组a。

①(p++)->num:表示通过指针变量先引用结构体数组元素 的成员num的值,再使指针变量本身加1,指针变量加1表示使指针变量指向结构体数组的下一个元素。

②(++p)->num:先使指针变量本身加1,先使使指针变量指向结构体数组的下一个元素,然后引用指针变量所指向的结构体数组元素的成员num的值。

结构体变量作为函数的形式参数实验总结

#include

#include

#include

typedef struct str{

int len;

char s[0];

str(int k)

{

len=k;

}

}Str;

void make(Str tmp) // 注意当函数的形参是Str tmp 时,传递的方式是普通的结构体变量传值调用,这里让len的值改变不会影响下面的temp的len

{

tmp.len=2;

}

void make_ptr(Str &tmp) // 当函数的形参是Str &tmp,时传递的是结构体的地址,当这里使得tmp.len值改变时,实参temp.len值也会改变

{

tmp.len=3;

}

void make_ptr2(Str *tmp) // 函数参数是一个Str类型的指针,传地址调用就不用说了,(上面的引用方式是C++的特性之一,C语言不能那样使用)

{

tmp->len=4;

}

int main(int argc, char** argv) {

struct str temp(1);

printf("temp=%d\n",temp);

make(temp);

printf("temp=%d\n",temp);

make_ptr(temp);

printf("temp=%d\n",temp);

return 0;

}

结构体变量作为函数参数传递的3种方法

将一个结构体变量中的数据传递给另一个函数,有下列3种方法:

用结构体变量名作参数。一般较少用这种方法。

用指向结构体变量的指针作实参,将结构体变量的地址传给形参。

用结构体变量的引用变量作函数参数。

下面通过一个简单的例子来说明,并对它们进行比较。

【例7.5】有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们的值输出。

1) 用结构体变量作函数参数。

#include

#include

using namespace std;

struct Student//声明结构体类型Student

{

int num;

char name[20];

float score[3];

};

int main( )

{

void print(Student); //函数声明,形参类型为结构体Student

Student stu; //定义结构体变量

stu.num=12345; //以下5行对结构体变量各成员赋值

stu.name="Li Fung";

stu.score[0]=67.5;

stu.score[1]=89;

stu.score[2]=78.5;

print(stu); //调用print函数,输出stu各成员的值

return 0;

}

void print(Student st)

{

cout<

<

}

运行结果为:

12345 Li Fung 67.5 89 78.5 (2)

2)用指向结构体变量的指针作实参在上面程序的基础上稍作修改即可。

复制纯文本新窗口

#include

#include

using namespace std;

struct Student

{

int num; string name; //用string类型定义字符串变量

float score[3];

}stu={12345,"Li Fung",67.5,89,78.5}; //定义结构体student变量stu并赋初值

int main( )

{

void print(Student *); //函数声明,形参为指向Student类型数据的指针变量

Student *pt=&stu; //定义基类型为Student的指针变量pt,并指向stu

print(pt); //实参为指向Student类数据的指针变量

return 0;

}

//定义函数,形参p是基类型为Student的指针变量

void print(Student *p)

{

cout<num<name<score[0]<

p->score[1]<score[2]<

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。