C언어 - 구조체를 함수로 전달하는 방법

2020. 11. 15. 11:17개인공부/C언어

struct fortune{

	char 	bank_name[FUNDLEN];
    double 	bank_saving;
    char	fund_name[FUNDLEN];
    double 	fund_invest;
};    
    
//double sum(double, double);
double sum(struct fortune my_fortune);
    
int main(){

	struct fortune my_fortune = {
    "Welles-Fargo",
    4032.27,
    "JPMorgan Chase",
    8543.94
    };
    
    printf("Total : $%.2f.\n",
    	//sum(&my_fortune.bank_saving, &my_fortune.fund_invest));
        sum(my_fortune); // 위를 이렇게 쓸수있으면 얼마나 편할까?
        
        
        return 0;
        
}
   
   //double sum(const double* x, const double* y)
   double sum(struct fortune my_fortune)
   {
   //*x = 0.0f;
   //*y = 0.0f;
   //return *x+ *y;
   retrun my_fortune.bank_saving + my_fortune.fund_invest;
   }
   
   // 구조체도 대입을하면 복사가 된다.

위의 방법은 my_fortune이라는 같은 이름으로 복사해서 연산에 쓰인다. 고로 메모리 낭비.

 

 

struct fortune{

	char 	bank_name[FUNDLEN];
    double 	bank_saving;
    char	fund_name[FUNDLEN];
    double 	fund_invest;
};    
    
//double sum(double, double);
double sum(struct fortune *my_fortune); //my_fortune 포인터
    
int main(){

	struct fortune my_fortune = {
    "Welles-Fargo",
    4032.27,
    "JPMorgan Chase",
    8543.94
    };
    
    printf("Total : $%.2f.\n",
        sum(&my_fortune); // my_fortune의 주소를 가르킨다.
    );
        
    return 0;        
}
   
   double sum(const struct fortune *mf)
   {
   retrun mf->bank_saving + mf->fund_invest;
   }
   
// my_fortune 값을 복사해서 연산에 쓰는것이 아니라 포인터로 가르켜 연산하는 방법
// 메모리 낭비를 막을수 있지만 my_fortune 자체의 값을 건드려 바꿀수 있으므로 const를 붙여준다.

 

 

출처 : 홍정모의 따라배우는 C언어