1. 程式人生 > >有關結構體指標與函式傳參返回值型別的六種方法

有關結構體指標與函式傳參返回值型別的六種方法

#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