结构体 使用指针地址传递一般在多少个类型以上比较合适?

时间:2021-03-31 16:59:51
结构体 使用指针地址传递一般在多少个类型以上比较合适?

11 个解决方案

#1


不太清楚题意,貌似无啥限制

#2


没看懂。不妨举个例子说明你的问题。

#3


引用 2 楼 slowgrace 的回复:
没看懂。不妨举个例子说明你的问题。

#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,还是传指针吧 =。=

#5


引用 4 楼 aizibion 的回复:
没啥标准限制,不同参数类型使用在不同场合罢了

不过如果你得结构体大小超过65536,还是传指针吧 =。=

那内存的开销怎么办?

#6


结构体变量传地址或引用比较好,传值的话要进行值拷贝,可能会多几条汇编语句

#7


引用 6 楼 butwang 的回复:
结构体变量传地址或引用比较好,传值的话要进行值拷贝,可能会多几条汇编语句

不太懂 能再详细点么?

#8


看懂你的问题了,我也不知道答案,不过可以帮你翻译一下 结构体 使用指针地址传递一般在多少个类型以上比较合适?

(1)结构类型的参数是传值好还是传地址好?
(2)是不是size较大的结构要传地址,娇小的结构可以直接传值?
(3)如果(2)的猜测对的话,一般多大的结构要传地址?

#9


楼上正解,传指针一个也才4

#10


一般来说,我觉得传地址(也就是以指针形式声明形参)比传值(以结构形式声明形参)好。

因为传值的话,函数需要把对应的实参的全部数据拷贝一份,浪费内存啊

#11


先来看C的参数传递方式,C的参数传递就只有传值,传递过去使用的方式不同罢了。

再看楼主的问题,结构体不大的情况下,可不可以考虑不传指针。

《C程序设计语言》一书中提到了,结构体作为参数传递时,如果结构体长度较小传值可以,但结构体大的时候传递结构指针效率高,把结构体指针作为参数传递不用复制内存。也就是说,这没什么不可以的,但从效率来讲,还是指针快。

#1


不太清楚题意,貌似无啥限制

#2


没看懂。不妨举个例子说明你的问题。

#3


引用 2 楼 slowgrace 的回复:
没看懂。不妨举个例子说明你的问题。

#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,还是传指针吧 =。=

#5


引用 4 楼 aizibion 的回复:
没啥标准限制,不同参数类型使用在不同场合罢了

不过如果你得结构体大小超过65536,还是传指针吧 =。=

那内存的开销怎么办?

#6


结构体变量传地址或引用比较好,传值的话要进行值拷贝,可能会多几条汇编语句

#7


引用 6 楼 butwang 的回复:
结构体变量传地址或引用比较好,传值的话要进行值拷贝,可能会多几条汇编语句

不太懂 能再详细点么?

#8


看懂你的问题了,我也不知道答案,不过可以帮你翻译一下 结构体 使用指针地址传递一般在多少个类型以上比较合适?

(1)结构类型的参数是传值好还是传地址好?
(2)是不是size较大的结构要传地址,娇小的结构可以直接传值?
(3)如果(2)的猜测对的话,一般多大的结构要传地址?

#9


楼上正解,传指针一个也才4

#10


一般来说,我觉得传地址(也就是以指针形式声明形参)比传值(以结构形式声明形参)好。

因为传值的话,函数需要把对应的实参的全部数据拷贝一份,浪费内存啊

#11


先来看C的参数传递方式,C的参数传递就只有传值,传递过去使用的方式不同罢了。

再看楼主的问题,结构体不大的情况下,可不可以考虑不传指针。

《C程序设计语言》一书中提到了,结构体作为参数传递时,如果结构体长度较小传值可以,但结构体大的时候传递结构指针效率高,把结构体指针作为参数传递不用复制内存。也就是说,这没什么不可以的,但从效率来讲,还是指针快。