有關結構體指標與函式傳參返回值型別的六種方法
阿新 • • 發佈:2019-02-09
#include<stdio.h>
#include<stdlib.h>
#if 0
//struct_1 在main函式中定義結構體,並實現功能
int main(void)
{
struct results
{
float interim_results;
float end_results;
float average_scores;
}st;
printf("input interim_results:");
scanf("%f",&st.interim_results);
printf ("input end_results:");
scanf("%f",&st.end_results);
st.average_scores = (st.interim_results+st.end_results)/2;
printf("%.2f\n",st.average_scores);
return 0;
}
#endif
#if 0
//struct_2 結構體指標
int main(void)
{
struct results
{
float interim_results;
float end_results;
float average_scores;
}; //這裡不能有結構體變數名st
struct results *st = malloc(sizeof(struct results));
printf("input interim_results:");
scanf("%f",&st->interim_results);// ->
printf("input end_results:");
scanf("%f",&st->end_results);
st->average_scores = (st->interim_results+st->end_results)/2 ;
printf("%.2f\n",st->average_scores);
return 0;
}
#endif
#if 0
//struct_3 在main函式外面建立結構體
struct results
{
float interim_results;
float end_results;
float average_scores;
}; //這裡不能有結構體變數名st
int foo(float *interim_results,float *end_results,float *average_scores)
{
*average_scores = (*interim_results+*end_results)/2;
}
int main(void)
{
struct results *st = malloc(sizeof(struct results));
printf("input interim_results:");
scanf("%f",&st->interim_results);// ->
printf("input end_results:");
scanf("%f",&st->end_results);
foo(&st->interim_results,&st->end_results,&st->average_scores);
printf("%.2f\n",st->average_scores);
return 0;
}
#endif
#if 0
//struct_4 構建沒有引數和返回值的函式,更高階封裝
struct results
{
float interim_results;
float end_results;
float average_scores;
}; //這裡不能有結構體變數名st
void foo()
{
struct results *st = malloc(sizeof(struct results));
printf("input interim_results:");
scanf("%f",&st->interim_results);// ->
printf("input end_results:");
scanf("%f",&st->end_results);
st->average_scores = (st->interim_results+st->end_results)/2;
printf("%.2f\n",st->average_scores);
}
int main(void)
{
foo();
return 0;
}
#endif
#if 0
//struct_5 在main函式外面建立結構體,構建傳遞結構體指標並返回void的函式foo
struct results
{
float interim_results;
float end_results;
float average_scores;
}; //這裡不能有結構體變數名st
void foo(struct results *st)
{
printf("input interim_results:");
scanf("%f",&st->interim_results);// ->
printf("input end_results:");
scanf("%f",&st->end_results);
st->average_scores = (st->interim_results+st->end_results)/2;
}
int main(void)
{
struct results *st = malloc(sizeof(struct results));
foo(st);
printf("%.2f\n",st->average_scores);
return 0;
}
#endif
#if 1
//struct_5 在main函式外面建立結構體,構建傳遞結構體指標並結構體指標的函式foo
struct results
{
float interim_results;
float end_results;
float average_scores;
}; //這裡不能有結構體變數名st
struct results *foo()
{
struct results *st = malloc(sizeof(struct results));
printf("input interim_results:");
scanf("%f",&st->interim_results);// ->
printf("input end_results:");
scanf("%f",&st->end_results);
st->average_scores = (st->interim_results+st->end_results)/2;
return st;
}
int main(void)
{
struct results *st;
st = foo();
printf("%.2f\n",st->average_scores);
return 0;
}
#endif