return和printf的區別

printf,即打印函數,即將傳入的傳輸打印到屏幕上來,重點在於打印到屏幕上,而不是"輸出"這個概念,輸出多是在函數這個黑盒子裏進行了數據運算,可是屏幕前的你我是看不見,其格式爲

'printf("我是一個字符串");'

而return 則是返回值,什麼是函數的返回值?通常是將這個函數對數據處理後的結果返回出來,若是沒有返回值,會發生什麼呢?

#include<stdio.h>
int main(void)
{
    int a;
    
    a = max(1,2);
    printf(a);
    return 0;
}  
int max(int x,int y)
{
    int max;
    
    if (x > y)
        max = x;
    else 
        max = y;
}

咱們會發現打印出的a仍然是max值,這是由於若是沒有指定返回值,max函數會自動返回一個值,此次咱們給它任意加上一個返回值

#include<stdio.h>
int main(void)
{
    int a;
    
    a = max(1,2);
    printf(a);
    return 0;
}  
int max(int x,int y)
{
    int max;
    
    if (x > y)
        max = x;
    else 
        max = y;
        return 100;
}

咱們會發現打印出來是100,爲何呢?這是由於a = max(1,2);這個語句實際上包含了兩個步驟:函數

  1. 爲max()函數傳入參數1和,2,在max參數中進行一系列的處理,按照咱們對max函數的理解,咱們應該獲得一個較大的值的,可是如今卻獲得了100,這是由於這個函數返回的值是用return語句執行的,而咱們返回了100這個數,天然就獲得了100這個結果了.若是咱們要返回正確的值,咱們應該返回max,即return max才行.一般返回值的類型在定義函數的時候須要在函數頭說明.入這裏的int max前面的int就是返回值類型.
  2. 獲得這個返回值以後,而後將這個返回值賦值給a.若是咱們沒有使用返回值,而編譯器又沒有默認返回一個值,那麼咱們就是將一個函數直接賦值給變量a,而不是一個值,一般這都會報錯.這個返回值通常是用函數頭加實參組成.如此處的max(1,2)就是一個返回值.這個返回值實際就是一個數,所以咱們能夠把它做爲數值計算,如max(1,2) * 1,或者做爲另外一個函數的傳入參數,如sqrt(max(1,2)),一般咱們會遇到一個報錯,說把函數做爲一個參數傳入,那麼極可能就是由於咱們沒有爲這個函數傳入參數,而又沒有使用函數指針,不能將函數做爲參數傳入

從上面咱們能夠再想一下,既然函數通常都有返回值,那麼printf()這個函數又有沒有參數呢?

#include<stdio.h>
int main(void)
{
    int a;
    
    a = printf("Hello World!");
    printf("%d",a);
    return 0;
}

實際上我跑一下就會發現咱們a是有值的,若是咱們多試幾回,就會發現返回值實際上是字符串的長度,實際上,若是printf跑出問題了,返回值會是一個負數.這在實際的應用中是有一些應用價值的.指針

如今想一下,爲何c的標準寫法須要有一個返回值,又通常返回0呢?

相關文章
相關標籤/搜索