11 个解决方案
#1
不太清楚题意,貌似无啥限制
#2
没看懂。不妨举个例子说明你的问题。
#3
#include<stdio.h>
struct complex
{ float re,im;
};
void out(struct complex *w)
{ printf("%.2f",w->re);
if(w->im>0)
printf("+%.2fi\n",w->im);
else
printf("-%.2fi\n",-w->im);
}
struct complex add(struct complex *x,struct complex *y)
{ struct complex z;
z.re=x->re+y->re;
z.im=x->im+y->im;
return z;
}
struct complex sub(struct complex *x,struct complex *y)
{ struct complex z;
z.re=x->re-y->re;
z.im=x->im-y->im;
return z;
}
struct complex mul(struct complex *x,struct complex *y)
{ struct complex z;
z.re=x->re*y->re-x->im*y->im;
z.im=x->re*y->im+x->im*y->re;
return z;
}
struct complex div(struct complex *x,struct complex *y)
{ struct complex z;
z.re=(x->re*y->re+x->im*y->im)/(x->im*x->im+y->im*y->im);
z.im=(x->im*y->re-x->re*y->im)/(x->im*x->im+y->im*y->im);
return z;
}
void main()
{ struct complex x,y,w;
scanf("%f+%fi,%f+%fi",&x.re,&x.im,&y.re,&y.im);
w=add(&x,&y);out(&w);
w=sub(&x,&y);out(&w);
w=mul(&x,&y);out(&w);
w=div(&x,&y);out(&w);
}
--------例如这个结构体的参数不是很大,应该就可以不用指针传递了吧?
#4
没啥标准限制,不同参数类型使用在不同场合罢了
不过如果你得结构体大小超过65536,还是传指针吧 =。=
不过如果你得结构体大小超过65536,还是传指针吧 =。=
#5
那内存的开销怎么办?
#6
结构体变量传地址或引用比较好,传值的话要进行值拷贝,可能会多几条汇编语句
#7
不太懂 能再详细点么?
#8
看懂你的问题了,我也不知道答案,不过可以帮你翻译一下
:
(1)结构类型的参数是传值好还是传地址好?
(2)是不是size较大的结构要传地址,娇小的结构可以直接传值?
(3)如果(2)的猜测对的话,一般多大的结构要传地址?
(1)结构类型的参数是传值好还是传地址好?
(2)是不是size较大的结构要传地址,娇小的结构可以直接传值?
(3)如果(2)的猜测对的话,一般多大的结构要传地址?
#9
楼上正解,传指针一个也才4
#10
一般来说,我觉得传地址(也就是以指针形式声明形参)比传值(以结构形式声明形参)好。
因为传值的话,函数需要把对应的实参的全部数据拷贝一份,浪费内存啊
因为传值的话,函数需要把对应的实参的全部数据拷贝一份,浪费内存啊
#11
先来看C的参数传递方式,C的参数传递就只有传值,传递过去使用的方式不同罢了。
再看楼主的问题,结构体不大的情况下,可不可以考虑不传指针。
《C程序设计语言》一书中提到了,结构体作为参数传递时,如果结构体长度较小传值可以,但结构体大的时候传递结构指针效率高,把结构体指针作为参数传递不用复制内存。也就是说,这没什么不可以的,但从效率来讲,还是指针快。
再看楼主的问题,结构体不大的情况下,可不可以考虑不传指针。
《C程序设计语言》一书中提到了,结构体作为参数传递时,如果结构体长度较小传值可以,但结构体大的时候传递结构指针效率高,把结构体指针作为参数传递不用复制内存。也就是说,这没什么不可以的,但从效率来讲,还是指针快。
#1
不太清楚题意,貌似无啥限制
#2
没看懂。不妨举个例子说明你的问题。
#3
#include<stdio.h>
struct complex
{ float re,im;
};
void out(struct complex *w)
{ printf("%.2f",w->re);
if(w->im>0)
printf("+%.2fi\n",w->im);
else
printf("-%.2fi\n",-w->im);
}
struct complex add(struct complex *x,struct complex *y)
{ struct complex z;
z.re=x->re+y->re;
z.im=x->im+y->im;
return z;
}
struct complex sub(struct complex *x,struct complex *y)
{ struct complex z;
z.re=x->re-y->re;
z.im=x->im-y->im;
return z;
}
struct complex mul(struct complex *x,struct complex *y)
{ struct complex z;
z.re=x->re*y->re-x->im*y->im;
z.im=x->re*y->im+x->im*y->re;
return z;
}
struct complex div(struct complex *x,struct complex *y)
{ struct complex z;
z.re=(x->re*y->re+x->im*y->im)/(x->im*x->im+y->im*y->im);
z.im=(x->im*y->re-x->re*y->im)/(x->im*x->im+y->im*y->im);
return z;
}
void main()
{ struct complex x,y,w;
scanf("%f+%fi,%f+%fi",&x.re,&x.im,&y.re,&y.im);
w=add(&x,&y);out(&w);
w=sub(&x,&y);out(&w);
w=mul(&x,&y);out(&w);
w=div(&x,&y);out(&w);
}
--------例如这个结构体的参数不是很大,应该就可以不用指针传递了吧?
#4
没啥标准限制,不同参数类型使用在不同场合罢了
不过如果你得结构体大小超过65536,还是传指针吧 =。=
不过如果你得结构体大小超过65536,还是传指针吧 =。=
#5
那内存的开销怎么办?
#6
结构体变量传地址或引用比较好,传值的话要进行值拷贝,可能会多几条汇编语句
#7
不太懂 能再详细点么?
#8
看懂你的问题了,我也不知道答案,不过可以帮你翻译一下
:
(1)结构类型的参数是传值好还是传地址好?
(2)是不是size较大的结构要传地址,娇小的结构可以直接传值?
(3)如果(2)的猜测对的话,一般多大的结构要传地址?
(1)结构类型的参数是传值好还是传地址好?
(2)是不是size较大的结构要传地址,娇小的结构可以直接传值?
(3)如果(2)的猜测对的话,一般多大的结构要传地址?
#9
楼上正解,传指针一个也才4
#10
一般来说,我觉得传地址(也就是以指针形式声明形参)比传值(以结构形式声明形参)好。
因为传值的话,函数需要把对应的实参的全部数据拷贝一份,浪费内存啊
因为传值的话,函数需要把对应的实参的全部数据拷贝一份,浪费内存啊
#11
先来看C的参数传递方式,C的参数传递就只有传值,传递过去使用的方式不同罢了。
再看楼主的问题,结构体不大的情况下,可不可以考虑不传指针。
《C程序设计语言》一书中提到了,结构体作为参数传递时,如果结构体长度较小传值可以,但结构体大的时候传递结构指针效率高,把结构体指针作为参数传递不用复制内存。也就是说,这没什么不可以的,但从效率来讲,还是指针快。
再看楼主的问题,结构体不大的情况下,可不可以考虑不传指针。
《C程序设计语言》一书中提到了,结构体作为参数传递时,如果结构体长度较小传值可以,但结构体大的时候传递结构指针效率高,把结构体指针作为参数传递不用复制内存。也就是说,这没什么不可以的,但从效率来讲,还是指针快。