通過傳遞地址值在被調函式中直接改變呼叫函式中的變數的值
我們知道形參值的改變並不能改變對應實參的值,把資料從被呼叫函式返回到呼叫函式的唯一途徑是通過return語句返回函式值,這就限定了只能返回一個數據。但是通過傳送地址值,可以在被呼叫函式中對呼叫函式中的變數進行引用,這也就使得通過改變對應實參的值有了可能。利用此形式就可以把兩個或兩個以上的資料從被呼叫函式返回到呼叫函式。下面以傳送地址的方式改變兩個數的值。
題目:編寫一個swap函式,把主函式中的變數a和b中的資料進行交換。
程式碼:
#include"stdio.h"
int main(){
int swap(int *p1,int *p2);
int *p1,*p2,a,b;
printf("請輸入兩個實數:\n");
scanf("%d%d",&a,&b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("%2d%2d\n",a,b);
return 0;
}
int swap(int *p1,int *p2)
{
int t;
if(*p1<*p2)
{
t=*p1;
*p1=*p2;
*p2=t;
}
return 0;
}
相關推薦
通過傳遞地址值在被調函式中直接改變呼叫函式中的變數的值
我們知道形參值的改變並不能改變對應實參的值,把資料從被呼叫函式返回到呼叫函式的唯一途徑是通過return語句返回函式值,這就限定了只能返回一個數據。但是通過傳送地址值,可以在被呼叫函式中對呼叫函式中的變數進行引用,這也就使得通過改變對應實參的值有了可能。利用此形式就可以把
JS中onclick方法呼叫函式時如何傳遞物件引數
今天在拼接字串時加入了onclick事件出發的函式需要傳遞引數物件,結果遇到了一系列問題,特此記錄 我是想用ajax接收後臺傳遞的json資料,在成功的回撥函式裡拼接字串,然後替換文字。 第一次我是這樣拼接的 success : function(data){
Cpp Experiment -- 當程序被銷燬時,不會呼叫程序中物件的解構函式
我們知道,當一個程序被銷燬時,分配給它的資源會被回收,包括洩漏的記憶體,實際上,重啟程序是解決記憶體洩漏的一個應急方法。 但是,殺死程序時, 會呼叫被殺死的程序建立的物件的解構函式嗎? 實驗程式碼如下: #include<iostream&
c++中使用指標呼叫函式和使用指標呼叫類物件的()過載函式
使用函式指標時,指標可以像函式名一樣,直接加括號和引數列表呼叫;也可先解引用再呼叫 //include directories... using namespace std; void testFun() { cout<<"this is
JavaScript中四種呼叫函式的方法
理解函式的四種呼叫方式對理解this有很大的幫助 1.函式呼叫 即直接呼叫,比如fn(),this指向函式當時的context,在瀏覽器中是window,在node中是global 2.方法呼叫 比如Obj.fn() this指向Obj. 如a.b.c.d.f()那t
javascript 中的立即呼叫函式模式、閉包及es6中的塊級作用域
先來看一個在牛客上看到的面試題: 這裡一開始會以為是不就是隔1秒輸出i的值嗎,最後結果就是輸出0~9 的十個數字呀,真的是太young了。 但是真是擼了一遍程式碼,控制檯輸出刺眼的10個10,what? 這個查了資料是說因為這個函式為每一個i都設定了一個計時器,那麼
shell指令碼中使用if和bc比較變數值和指定值
【預備知識】 假如我有個日誌檔案,每天會往裡追加。日誌摘要如下—— 2018-06-12 09:08:56,105 - hdfs.client - INFO - Renaming ‘/apps/wps_prt_feature/business_info/20
js使用動態新增的方式傳函式引數不能呼叫函式的問題
問題: 使用jquery動態的新增頁面元素,但是傳引數的時候不能傳中文,傳中文的時候函式調用不了出現錯誤. 原因: 網上查了一下,感覺是沒有加引號導致的 自己的情況: 但是自己是加了引號的,自己用的是在雙引號裡面加單引號. 舉個例子: $("#body").ap
函式指標與指標函式以及結構體呼叫函式的方法
以前忘記在哪見過見過C語言中:結構體通過指標的方式呼叫函式的方法,就一直找,找了半天,同時發現自己對函式指標和指標函式這兩個概念沒搞清楚。下面先說一下兩者的區別。再者就是說一下結構體是
vue中mouted與methods中方法互相呼叫,以及vue中使用setInterval呼叫methods中方法
剛學習vue不久,下午做vue輪播小元件時遇到了mouted與methods中方法互相呼叫的問題. mouted呼叫methods中方法 mounted: function() { this.up(); } 在mouted中使用setInterval呼叫
二重指標變數做形參的目的是為了能在被調函式中改變指標變數的值
先看一段程式碼 #include <stdio.h> #include <stdlib.h> #include <string.h> void function1(int *v) { v = (int *)malloc(sizeof(i
c語言指標做函式引數,使用指標地址(二級指標)在被調函式中修改主調函式的指標。
1.程式碼 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char *prive; int data; } T_
php中unset一個變量之後, 通過引用賦值引用這個變量的變量會被unset嗎?
是否 有著 amp 如果 存在 其他 得到 val 發現 在php中變量的賦值分為按值賦值, 和引用賦值. 在按值賦值中, $a = val; $b = $a ; 可以看成$a = val; $b =val;變量b被賦予a的值之後, a和b便沒有任何的引用關系了, 此
Java方法中通過傳遞引數改變變數的值
剛在寫一個用例,需要在方法中改變傳遞的引數的值,可是java中只有傳值呼叫,沒有傳址呼叫。所以在java方法中改變引數的值是行不通的。但是可以改變引用變數的屬性值。 可以仔細理解一下下面幾句話: 1、對於基本型別引數,在方法體內對引數進行重新賦值,並不會改變原有變數的值。 2、對
空指標在主函式中被賦值與在呼叫函式中被賦值的差別
# include <stdio.h> int main() { int a=10; int *p=&a; p=NULL; printf("%d\n",*p); return 0; } 在這個程式中因為將a的地址賦值給指標p
討論java中呼叫函式,形參的傳遞是值傳遞還是引用傳遞的問題
首先說結論: 當引數是引用資料型別時,傳入形參的是實參的引用;(證一) 當引數是基本資料型別時,傳入形參的是實參值;(證二) 證明如下: (證一) public class PassByReferenceOrValueTest { public static void main(String
C語言 傳地址一定會改變主函式中變數的值嗎?
我們都知道在函式呼叫中,引數傳遞的方式有傳值和傳地址之分,如果主函式傳遞給子函式引數時採用傳地址的方式,主函式的變數值一定會變化嗎?請先看下面的程式:程式1#include<stdio.h>void swap(int *x,int *y){int t;t=*x;*
C++中函式引數傳遞(值傳遞、指標傳遞,引用傳遞)
今天想寫一個函式,從函式中把我需要的兩個值傳出來,由於傳出來的值比較多,所以不考慮用return來返回,需要通過引數把修改後的值拉出來供我使用,很當然的就想到了用指標,但是值就是傳不出來;使我對原有的大腦中指標的思維產生混沌感,今天一上午才把函式傳遞又走了
C語言 在被調函式中改變指標變數值的方法
先看一段程式碼: #include <iostream> void foo(char *p) { p = "after foo()"; } void main() { char *p = "before foo()"; foo(
關於Java 拷貝數組方法 Arrays.copyOf() 是地址傳遞還是值傳遞
clone images java 地址 tput mage alt 元素 color 基本元素為對象時,淺拷貝,拷貝引用(ArrayList 的clone()調用Arrays.copyof(),官方文檔註明為淺拷貝) class A{ int