user-0 提问: 数组元素不能作形参，那么结构体成员可以作形参使用么？

回复:
user: user-1
content: 引用 29 楼 u010412073 的回复:[quote=引用 25 楼 angel_su 的回复:] 不要纠结这个，无实质意义算了吧... 就是爱纠结，喜欢对比。所以。。。。。o(︶︿︶)o 唉。。不过终于解决了。自己写了看过了。反正我的编译环境不支持类似于x.x格式作为参数。所以不纠结了，还是谢谢各位耐心解答。。。继续看书吧。。。。[/quote]我只是有点不理解你的需求，为什么要事先定义好结构体成员，调用的时候传递给形参不就好了么？

user: user-1
content: 值是在调用的时候传进去的，不是一开始就定义好这些类型的。

user: user-0
content: 引用 25 楼 angel_su 的回复:不要纠结这个，无实质意义算了吧... 就是爱纠结，喜欢对比。所以。。。。。o(︶︿︶)o 唉。。不过终于解决了。自己写了看过了。反正我的编译环境不支持类似于x.x格式作为参数。所以不纠结了，还是谢谢各位耐心解答。。。继续看书吧。。。。

user: user-1
content: 按错了... void A(int x,int y){}//普通定义  A(p.x,p.y)//传递指定的结构体成员  void A(Point p){}//结构体做整体定义  A(point);//传递整个结构体

user: user-1
content: 引用 16 楼 u010412073 的回复:感觉这时候x.x已经就是一个类似指定好数据类型的变量，把它看作整体，比如结构体x的成员int x  可以看作int x.x x.x当作整体。不就可以作为形参出现了么？ 那么是编译器不通过这中格式？ 可以不可以把x.x赋给一个类型相同的变量，就可以作为形参了？  这样不就意味着它实际是可以？ 只是不支持x.x这种格式？ 好吧，我都没办法用具体的函数实现，所以都是臆想的。。。 做形参的时候不可以啊，实参的时候才会传递指定的结构体过来。如果做为一个整体的话就是这样写了

user: user-2
content: 非用不可你就自己写个例子试试不就知道了吗，看各位的回答多努力

user: user-3
content: 不要纠结这个，无实质意义算了吧...

user: user-4
content: 引用 21 楼 u010412073 的回复:[quote=引用 19 楼 max_min_ 的回复:] [quote=引用 16 楼 u010412073 的回复:] [quote=引用 6 楼 Adol1111 的回复:] 在参数里使用数组，实际上会退化成普通的指针。 结构体的话不是这样用的，参数是有参数类型和类型名组成的。参数名只是个普通的名称，不能定义成XX.YY的形式。你想要传递结构体的成员，这是你调用时的事情，你调用的时候可以A（p.x,p.y），但不能实现指定好。或者你可以让完整的一个结构体类型做参数，也可以是这个结构体的指针或引用（C++）感觉这时候x.x已经就是一个类似指定好数据类型的变量，把它看作整体，比如结构体x的成员int x  可以看作int x.x x.x当作整体。不就可以作为形参出现了么？ 那么是编译器不通过这中格式？ 可以不可以把x.x赋给一个类型相同的变量，就可以作为形参了？  这样不就意味着它实际是可以？ 只是不支持x.x这种格式？ 好吧，我都没办法用具体的函数实现，所以都是臆想的。。。[/quote]  理解有点不妥！函数传参的时候，只要类型和函数的原型匹配就好了！至于是结构体的成员，还是结构体中成员的成员都是没有关系的！因为编译器也不会知道！它只是检查传进来的参数和函数原型是否匹配就好！ [/quote] 所以说void days(int judge.year，int judge.month，int judge.day) 这样的格式也可以？只不过把judge.year作为一个int型的变量看待？因为显然可以用比如int a，来作为 judge.year的形参，那同样可以把 judge.year作为形参吧，虽然完全没必要如此。另外a.b这样的格式形参支持么？ . [/quote] 恩！对的！只要参数的类型匹配就好啦！

user: user-0
content: 引用 14 楼 zh19921107 的回复:#include <iostream> using namespace std;  struct Date { 	int year; 	int month; 	int day; };  void ShowDate(Date &d) { 	cout<<"引用传参！"<<endl; 	cout<<"年份："<<d.year<<endl 		<<"月份："<<d.month<<endl 		<<"天数："<<d.day<<endl; }  void ShowDate(Date *d) { 	cout<<"指针传参！"<<endl; 	cout<<"年份："<<d->year<<endl 		<<"月份："<<d->month<<endl 		<<"天数："<<d->day<<endl; }  //个人觉得，形参就是体现实参的类型和个数而已。 //如果要数组元素做形参，直接定义个和数组元素 //同类型的形参不就行了吗？不是很明白这句话。 void ShowDate(int year,int month,int day) { 	cout<<"结构体成员传参！"<<endl; 	cout<<"年份："<<year<<endl 		<<"月份："<<month<<endl 		<<"天数："<<day<<endl; }  int main() { 	Date date={2013,11,18}; 	ShowDate(date); 	ShowDate(&date); 	ShowDate(date.year,date.month,date.day); 	return 1; } 个人见解，不足之处还望见谅！楼主加油！共勉！ 恩呢。这样自然是很好的。我的目的就是如果里面写个是具体的成员，便于对应，所以想知道这种格式作为参数有问题么？

user: user-0
content: 引用 20 楼 angel_su 的回复:感觉int judge.year完全不合语法的东西能用吗？真心没看过... 就想知道这种格式正确么？因为显然可以用比如int a，来作为 judge.year的形参，那同样可以把 judge.year作为形参吧，虽然完全没必要如此。但是用的话如果格式支持也是可以的吧？唯一的好处在于便于对应。因为如果有多个int 类型的时候这样写，便于对应成员。所以有这样的想法，当然也是由于数组的那点问题所以这样想。

user: user-0
content: 引用 19 楼 max_min_ 的回复:[quote=引用 16 楼 u010412073 的回复:] [quote=引用 6 楼 Adol1111 的回复:] 在参数里使用数组，实际上会退化成普通的指针。 结构体的话不是这样用的，参数是有参数类型和类型名组成的。参数名只是个普通的名称，不能定义成XX.YY的形式。你想要传递结构体的成员，这是你调用时的事情，你调用的时候可以A（p.x,p.y），但不能实现指定好。或者你可以让完整的一个结构体类型做参数，也可以是这个结构体的指针或引用（C++）感觉这时候x.x已经就是一个类似指定好数据类型的变量，把它看作整体，比如结构体x的成员int x  可以看作int x.x x.x当作整体。不就可以作为形参出现了么？ 那么是编译器不通过这中格式？ 可以不可以把x.x赋给一个类型相同的变量，就可以作为形参了？  这样不就意味着它实际是可以？ 只是不支持x.x这种格式？ 好吧，我都没办法用具体的函数实现，所以都是臆想的。。。[/quote]  理解有点不妥！函数传参的时候，只要类型和函数的原型匹配就好了！至于是结构体的成员，还是结构体中成员的成员都是没有关系的！因为编译器也不会知道！它只是检查传进来的参数和函数原型是否匹配就好！ [/quote] 所以说void days(int judge.year，int judge.month，int judge.day) 这样的格式也可以？只不过把judge.year作为一个int型的变量看待？因为显然可以用比如int a，来作为 judge.year的形参，那同样可以把 judge.year作为形参吧，虽然完全没必要如此。另外a.b这样的格式形参支持么？ .

user: user-3
content: 感觉int judge.year完全不合语法的东西能用吗？真心没看过...

user: user-4
content: 引用 16 楼 u010412073 的回复:[quote=引用 6 楼 Adol1111 的回复:] 在参数里使用数组，实际上会退化成普通的指针。 结构体的话不是这样用的，参数是有参数类型和类型名组成的。参数名只是个普通的名称，不能定义成XX.YY的形式。你想要传递结构体的成员，这是你调用时的事情，你调用的时候可以A（p.x,p.y），但不能实现指定好。或者你可以让完整的一个结构体类型做参数，也可以是这个结构体的指针或引用（C++）感觉这时候x.x已经就是一个类似指定好数据类型的变量，把它看作整体，比如结构体x的成员int x  可以看作int x.x x.x当作整体。不就可以作为形参出现了么？ 那么是编译器不通过这中格式？ 可以不可以把x.x赋给一个类型相同的变量，就可以作为形参了？  这样不就意味着它实际是可以？ 只是不支持x.x这种格式？ 好吧，我都没办法用具体的函数实现，所以都是臆想的。。。[/quote]  理解有点不妥！函数传参的时候，只要类型和函数的原型匹配就好了！至于是结构体的成员，还是结构体中成员的成员都是没有关系的！因为编译器也不会知道！它只是检查传进来的参数和函数原型是否匹配就好！

user: user-0
content: 引用 8 楼 u012348978 的回复:是的。数组和结构体积巨大，不合适在栈使用和传递。以引用的方式使用（也就是指针的方式）。 typedef struct { char *ch; }st,*pst;  void fun( pst s){ s->ch = ( char*)malloc(1024*1024); }  char* func(void){ 	char *p = (char*)malloc(1024*1024); 	return p; } 这个例子十分夸张，这里这是想说明为什么是引用而不是传值。  void days(int judge.year，int judge.month，int judge.day)这个不需要这样做。  void fun( pst s){      s->成员名；这样你就可以访问结构的任意成员。 }  你想单独使用结构成员，区分一下指针和变量就可以了。 函数声明 void days(int a，int b，int c) 如果是结构指针，这样传递void days(judge->year， judge->month， judge->day) 如果是结构变量，这样传递void days( judge.year， judge.month， judge.day) 为什么都不看重点，我是说非用不可的话，可以么？

user: user-0
content: 引用 7 楼 derekrose 的回复:4L。。。 楼主很明显的说了结构体成员，还写了例子，不知所云 5L说得对 楼主你听他的吧我也觉得五楼说的太好了。可是还是没告诉我，到底能不能把结构体成员作为参数？ 虽然没必要这样写，完全可以用其他方法代替，可是我就是想知道。非用不可的话，可以么？

user: user-0
content: 引用 6 楼 Adol1111 的回复:在参数里使用数组，实际上会退化成普通的指针。 结构体的话不是这样用的，参数是有参数类型和类型名组成的。参数名只是个普通的名称，不能定义成XX.YY的形式。你想要传递结构体的成员，这是你调用时的事情，你调用的时候可以A（p.x,p.y），但不能实现指定好。或者你可以让完整的一个结构体类型做参数，也可以是这个结构体的指针或引用（C++）感觉这时候x.x已经就是一个类似指定好数据类型的变量，把它看作整体，比如结构体x的成员int x  可以看作int x.x x.x当作整体。不就可以作为形参出现了么？ 那么是编译器不通过这中格式？ 可以不可以把x.x赋给一个类型相同的变量，就可以作为形参了？  这样不就意味着它实际是可以？ 只是不支持x.x这种格式？ 好吧，我都没办法用具体的函数实现，所以都是臆想的。。。

user: user-5

user: user-5
content: #include <iostream> using namespace std;  struct Date { 	int year; 	int month; 	int day; };  void ShowDate(Date &d) { 	cout<<"引用传参！"<<endl; 	cout<<"年份："<<d.year<<endl 		<<"月份："<<d.month<<endl 		<<"天数："<<d.day<<endl; }  void ShowDate(Date *d) { 	cout<<"指针传参！"<<endl; 	cout<<"年份："<<d->year<<endl 		<<"月份："<<d->month<<endl 		<<"天数："<<d->day<<endl; }  //个人觉得，形参就是体现实参的类型和个数而已。 //如果要数组元素做形参，直接定义个和数组元素 //同类型的形参不就行了吗？不是很明白这句话。 void ShowDate(int year,int month,int day) { 	cout<<"结构体成员传参！"<<endl; 	cout<<"年份："<<year<<endl 		<<"月份："<<month<<endl 		<<"天数："<<day<<endl; }  int main() { 	Date date={2013,11,18}; 	ShowDate(date); 	ShowDate(&date); 	ShowDate(date.year,date.month,date.day); 	return 1; } 个人见解，不足之处还望见谅！楼主加油！共勉！

user: user-0
content: 引用 5 楼 AnYidan 的回复:不知　lz　为何会有此种需求，  如果函数定义中需要使用某中聚集型数据类型中的多个元素，一般用此聚集型数据类型作形参（数组用指针，结构体可以用指针也可以用其本身）  如果函数定义中只需要使用某中聚集型数据类型中的某一个元素，一般用此元素的数据类型作形参恩呢，说的很好，我也是这样总结的，只要用其对应数据的类型就可以，可是我就是纠结，到底可不可以用judge.year这中它本来的格式作为形参。为什么会这样问，也是由于，看到数组时有一句话，说数组元素不能作为参数，比如int a【5】显然指的是不能按照本来的元素格式a【i】作为形参（因为这样i没意义，a代表数组名，其实是一个数组名作为形参了），当然按照你的说法，可以定义int a；只要是类型相同就可以，作为数组中元素的形参。但是对于结构体，我想知道，可不可以把本来的形式作为形参？就是想知道，自己又写不出具体的例子验证。。。

user: user-4
content: 引用 11 楼 u010412073 的回复:[quote=引用 4 楼 max_min_ 的回复:] 可以的！其实只是一个地址而已了！在参数的时候，数组和指针差不多！几乎一样的！  结构体也比较简单了！只是一个地址进去就好！  typedef struct Judge {   int year;   int month;   int day; }Judge_s;  void days(Judge_s *pJudge) {   // TODO something; } 我的意思是结构体成员，不是结构体，就是说结构体里面的每一个具体成员 比如申明函数时void days(int judge.year，int judge.month，int judge.day)可以么？  事先定义好judge含有year，month，day三个成员。  [/quote] 可以的啊！如果只是需要某一个成员的话，那就把这个成员当成参数传进去就好了！ 一个结构体成员传参也是一样的！只有类型匹配就好！