在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C/ C語(yǔ)言通過(guò)值和引用函數(shù)
C語(yǔ)言printf()和scanf()函數(shù)
C語(yǔ)言strlen()函數(shù)
C語(yǔ)言指針
C語(yǔ)言ftell()函數(shù)
C語(yǔ)言#ifdef指令
C語(yǔ)言程序執(zhí)行流程
C語(yǔ)言歷史
C語(yǔ)言fprintf()和fscanf()函數(shù)
C語(yǔ)言#define指令
C語(yǔ)言#if指令
C語(yǔ)言將數(shù)組傳遞給函數(shù)
C語(yǔ)言指針的指針
C語(yǔ)言rewind()函數(shù)
C語(yǔ)言常量
C語(yǔ)言strcat()函數(shù)
C語(yǔ)言#ifndef指令
C語(yǔ)言continue語(yǔ)句
C語(yǔ)言注釋
C語(yǔ)言#include指令
C語(yǔ)言類(lèi)型轉(zhuǎn)換
C語(yǔ)言strcpy()函數(shù)
C語(yǔ)言strlwr()函數(shù)
C語(yǔ)言while循環(huán)
C語(yǔ)言字符串
C語(yǔ)言strrev()函數(shù)
C語(yǔ)言gets()和puts()函數(shù)
C語(yǔ)言文件處理
C語(yǔ)言存儲(chǔ)分類(lèi)
C語(yǔ)言運(yùn)算符
C語(yǔ)言數(shù)據(jù)類(lèi)型
C語(yǔ)言strcmp()函數(shù)
C語(yǔ)言VS開(kāi)發(fā)環(huán)境安裝
C語(yǔ)言轉(zhuǎn)義序列
C語(yǔ)言第一個(gè)程序
C語(yǔ)言變量
C語(yǔ)言goto語(yǔ)句
C語(yǔ)言預(yù)處理器指令
C語(yǔ)言指針?biāo)阈g(shù)運(yùn)算
C語(yǔ)言數(shù)學(xué)函數(shù)
C語(yǔ)言二維數(shù)組
C語(yǔ)言for循環(huán)
C語(yǔ)言命令行參數(shù)
C語(yǔ)言通過(guò)值和引用函數(shù)
C語(yǔ)言fputs()和fgets()函數(shù)
C語(yǔ)言do-while循環(huán)
C語(yǔ)言結(jié)構(gòu)體數(shù)組
C語(yǔ)言循環(huán)
C語(yǔ)言#pragma指令
C語(yǔ)言關(guān)鍵字
C語(yǔ)言#error指令
C語(yǔ)言聯(lián)合體
C語(yǔ)言特點(diǎn)
C語(yǔ)言break語(yǔ)句
C語(yǔ)言遞歸
C語(yǔ)言函數(shù)
C語(yǔ)言結(jié)構(gòu)體
C語(yǔ)言switch語(yǔ)句
C語(yǔ)言結(jié)構(gòu)體嵌套
C語(yǔ)言fputc()和fgetc()函數(shù)
C語(yǔ)言fseek()函數(shù)
C語(yǔ)言字符串函數(shù)
C語(yǔ)言if-else語(yǔ)句
C語(yǔ)言教程
C語(yǔ)言宏
C語(yǔ)言數(shù)組
C語(yǔ)言strupr()函數(shù)
C語(yǔ)言#undef指令

C語(yǔ)言通過(guò)值和引用函數(shù)

、

將參數(shù)值或數(shù)據(jù)傳遞給C語(yǔ)言函數(shù)有兩種方法:通過(guò)值調(diào)用和通過(guò)引用調(diào)用。原始值在通過(guò)值調(diào)用時(shí)不修改,但通過(guò)引用調(diào)用時(shí),在函數(shù)中可進(jìn)行修改。

下面將分別講解如何通過(guò)值調(diào)用和通過(guò)引用調(diào)用,并用使用示例逐個(gè)調(diào)用演示執(zhí)行。

通過(guò)值調(diào)用

在通過(guò)值調(diào)用函數(shù)時(shí),原始值不被修改。

在通過(guò)值調(diào)用時(shí),傳遞給函數(shù)的值由函數(shù)參數(shù)在堆棧內(nèi)存位置中本地存儲(chǔ)。如果更改函數(shù)參數(shù)的值,則僅對(duì)當(dāng)前調(diào)用函數(shù)中的值進(jìn)行臨時(shí)更改。它不會(huì)改變調(diào)用者方法(如:main())中的變量的值。即:函數(shù)只是使用參數(shù)值的一個(gè)副本,函數(shù)執(zhí)行完成副本刪除,而原始值不會(huì)有任何影響。

我們?cè)囍ㄟ^(guò)下面的例子來(lái)了解C語(yǔ)言中的通過(guò)值調(diào)用的概念,首先創(chuàng)建一個(gè)工程:function-call-by-value-reference,并在這個(gè)工程下創(chuàng)建一個(gè)源文件:call-by-value.c,其代碼如下所示-

#include <stdio.h>  

void change(int num) {
    printf("Before adding value inside function num=%d \n", num);
    num = num + 10;
    printf("After adding value inside function num=%d \n", num);
}

int main() {
    int x = 10;
    // 更新之前參數(shù)x的值
    printf("Before function call x=%d \n", x);
    change(x); // passing value in function  
    // 更新之后參數(shù)x的值
    printf("After function call x=%d \n", x);

    return 0;
}

執(zhí)行上面示例代碼,得到以下結(jié)果 -

Before function call x=10
Before adding value inside function num=10
After adding value inside function num=20
After function call x=10

通過(guò)引用調(diào)用

在通過(guò)引用的調(diào)用中,原始值可被修改并反映到外部調(diào)用者。

這里,使用值的地址傳遞到函數(shù)中,所以實(shí)際和形式的參數(shù)共享相同的地址空間。 因此,函數(shù)內(nèi)部的值被改變,都會(huì)反映在函數(shù)內(nèi)部和外部,因?yàn)楹瘮?shù)內(nèi)部和外部此時(shí)都指向參數(shù)的地址空間。

注意:要了解通過(guò)引用調(diào)用,您必須具有指針的基本知識(shí)。

讓我們通過(guò)下面的例子來(lái)嘗試?yán)斫釩語(yǔ)言中通過(guò)引用調(diào)用的概念,創(chuàng)建一個(gè)源文件:call-by-reference.c,其代碼如下所示-

#include <stdio.h>  

// 定義函數(shù),注意這里的參數(shù)名稱前加了一個(gè)星號(hào)(*)
void change2(int *num) {
    printf("Before adding value inside function num=%d \n", *num);
    (*num) += 100;
    printf("After adding value inside function num=%d \n", *num);
}

int main() {
    int x = 200;

    printf("Before function call x=%d \n", x);
    // 注意,下面?zhèn)鬟f的參數(shù)名稱前加了一個(gè)符號(hào)(&)
    change2(&x);// passing reference in function  
    printf("After function call x=%d \n", x);

    return 0;
}

執(zhí)行上面示例代碼,得到以下結(jié)果 -

Before function call x=200
Before adding value inside function num=200
After adding value inside function num=300
After function call x=300

C語(yǔ)言中通過(guò)值調(diào)用和通過(guò)引用調(diào)用之間的差異

通過(guò)值調(diào)用 通過(guò)引用調(diào)用
將值的副本傳遞給函數(shù) 將值的地址傳遞給函數(shù)
函數(shù)內(nèi)的更改不會(huì)反映在函數(shù)外 函數(shù)內(nèi)部的改變也反映在函數(shù)的外部
將在不同的內(nèi)存位置創(chuàng)建實(shí)際和正式的參數(shù) 將在相同的內(nèi)存位置創(chuàng)建實(shí)際和正式的參數(shù)