關於函式實現數值交換
#include <stdio.h> void swap0(int a ,int b) { printf(" a addr : %d , b addr: %d\n", &a , &b); int temp = a; a = b; b = temp; } int main() { int x=3 , y=5; printf(" x addr : %d , y addr: %d\n", &x , &y); printf(" x : %d , y : %d\n", x , y); swap0( x, y); printf(" x : %d , y : %d\n", x , y); return 0; }
執行結果:
x addr : 1703740 , y addr: 1703736
x : 3 , y : 5
a addr : 1703652 , b addr: 1703656
x : 3 , y : 5
Press any key to continue
表明:採用值呼叫方式無法交換實參的值,呼叫交換swap0導致實際引數x和y的值分別複製到形式引數a和b中,系統為形參a、b分配新的記憶體地址,故改變形參的值對實參無影響。在交換體內,a和b的值互換,函式終止。 終止後,a和b的新值不會被複制回實際引數。 因此,實際引數的值不受功能的影響。
#include <stdio.h> void swap1(int *a , int *b)//使用指標方式修改指向記憶體塊的值, 傳值方式 { printf(" a addr : %d , b addr: %d\n", &a , &b); printf(" a memory block addr : %p , b memory block addr: %p\n", a , b); int temp = *a; *a = *b; *b = temp; printf(" a addr : %d , b addr: %d\n", &a , &b); printf(" a memory block addr : %p , b memory block addr: %p\n", a , b); } int main() { int x=3 , y=5; printf(" x addr : %d , y addr: %d\n", &x , &y); printf(" x memory block addr : %p , y memory block addr: %p\n", &x,&y); printf(" x : %d , y : %d\n", x , y); swap1( &x, &y); printf(" x : %d , y : %d\n", x , y); return 0;
}
執行結果:
x addr : 1703740 , y addr: 1703736
x memory block addr : 0019FF3C , y memory block addr: 0019FF38
x : 3 , y : 5
a addr : 1703652 , b addr: 1703656
a memory block addr : 0019FF3C , b memory block addr: 0019FF38
a addr : 1703652 , b addr: 1703656
a memory block addr : 0019FF3C , b memory block addr: 0019FF38
x : 5 , y : 3
Press any key to continue
可以發現:採用指標方式修改指向記憶體塊的值時,也會為形參分配新的地址,但是形參指向的記憶體塊的地址與實參相同,故對形參指向的記憶體塊的值進行修改,實參指向的記憶體塊的值即發生相同的改變,故可以完成值的交換。
#include <stdio.h>
void swap2(int &a , int &b)//使用引用方式,串引用方式
{
printf(" a addr : %d , b addr: %d\n", &a , &b);
int temp = a;
a = b;
b = temp;
}
int main()
{
int x=3 , y=5;
printf(" x : %d , y : %d\n", x , y);
printf(" x addr : %d , y addr: %d\n", &x , &y);
swap2(x , y);
printf(" x : %d , y : %d\n", x , y);
return 0;
}
執行結果:
x : 3 , y : 5
x addr : 1703740 , y addr: 1703736
a addr : 1703740 , b addr: 1703736
x : 5 , y : 3
Press any key to continue
可以發現:利用引用引數可以成功完成數值交換,呼叫swap2(x,y);則int &a=x;int &b=y; 那麼a相當於x的別名,b相當於y的別名,交換a和b的值即相當於交換x和y的值。
注:引用是一種特殊型別的變數,我們可以認為它是另一個變數的別名,利用引用名和原來的變數名訪問變數的效果是一樣的。引用的形式是:型別識別符號 &引用名。比如:
int i, j;
int &ri=i; // 建立一個int型的引用ri,並將其初始化為變數i的一個別名
j=10;
ri=j; // 相當於 i=j;
相關推薦
關於函式實現數值交換
#include <stdio.h> void swap0(int a ,int b) { printf(" a addr : %d , b addr: %d\n", &a , &b); int temp = a; a = b;
用函式實現交換變數值
敲黑板劃重點 用函式實現兩個數字內容的交換,你可能會這樣做: void change_num(int a, int b) { int tmp = a; a = b; b = tmp; } 感覺太簡單了阿,然後呼叫函式,大功告成 結果發現,,,emmm,不對啊 內容沒有交換
三種方法實現整型數值交換
int 異或 交換 實現 整型 數值交換 臨時 變量 a+b 臨時變量法: int a = 5; int b = 4; int temp = 0; temp = a; a = b; b = temp; 異或法: int a = 5; int b = 6; a = a^b;
劍指offer-將一個字串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字串轉換整數的庫函式。 數值為0或者字串
class Solution { public: int StrToInt(string str) { int sum = 0; int data; if(str.empty()) return 0; i
practise函式實現——乘法口訣表,判斷素數,交換兩數,判斷閏年,陣列的初始清空逆置
1 .實現一個函式,列印乘法口訣表,口訣表的行數和列數自己指定, 輸入9,輸出9*9口訣表,輸出12,輸出12*12的乘法口訣表。 #include<stdio.h> #include<windows.h> voi
使用函式實現兩個數的交換。
#include <stdio.h> void swap(int *a,int *b) { int tmp; tmp=*a; *a=*b; *b=tmp; } int main()
C語言:使用函式實現兩個數的交換。
此題的解決思路為:建立一個Swap函式,引數為a和b,函式內部建立一個臨時變數tmp,用於交換兩個數。 但需要注意的是:函式傳參的過程中需要注意,形參是實參的一份臨時拷貝,形參的改變不會影響實參,所以此時函式傳參的時候需要傳遞實參的地址(&a),即傳址呼叫,在接收部
C用交換函式實現三個數排序
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> void swap(int *m,int
Java中異或運算實現兩個整數的交換以及其功能函式實現
今天學習到一種超酷炫的交換兩個整數的方法,給各位分享一下。異或運算屬於位運算的一種,首先簡單介紹一下異或預算的語法規則。 假設a與b為不相等的兩個整數。 (1)a^a=0; (2)a^b
使用函式實現兩個數的交換
#include<stdio.h> int swap(int *num1,int *num2) //異或方法交換 { *num1=*num1^*num2;
java版——實現兩個數值交換的四種方式
實現兩個數值交換,最常用的莫過於中間變數法,那是不是還有別的方式呢。請看下文: class Operator { // 實現兩個數值交換的多種方式 public static void main(
C 使用函式實現兩個數的交換
1.程式程式碼 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> int change_num(int *n1, int *n2)
JAVA_三種方法實現兩個整形變數的數值交換
JAVA中的基本資料交換方式有三種: 1.藉助中間變數 例:int a = 10 , b = 20 , c; //建立了三個變數,這裡的c即為我們的中間變數,在隨後的數值交換中起到了一個交換"橋樑
用異或操作實現的交換函數用以實現數組逆置中須要註意的問題
span include style 試題 blog text fontsize lib mod 用元素交換函數實現數組逆置非常easy,如以下代碼:(數組左右元素交換) #include<iostream> #include<stdlib.h>
兩數值交換,三種初學者方法。
static nbsp ont pri 三種 pan 初學 span public 第一種: public class jiaohuan { public static void main(String[]args) { int a=1,b=2; int m,n;
如何實現不同交換機上的終端在同一VLAN上互聯?
vlan如何實現不同交換機上的終端在同一VLAN上互聯?如下圖: PC0,PC1和PC4在同一VLAN ,PC2和PC3在同一VLAN,怎麽實現同一VLAN 上的終端互通呢? 我們知道在交換機不做任何配置的時候,所有端口都在同一個默認vlan下,所以將終端配置好IP地址之後5臺PC就可以互通,但是現
C語言 trim函式實現
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> //去除尾部空格 char *rtrim(char *str) { if(str == N
Python內建進位制轉換函式(實現16進位制和ASCII轉換)
在進行wireshark抓包時你會發現底端視窗報文內容左邊是十六進位制數字,右邊是每兩個十六進位制轉換的ASCII字元,這裡使用Python程式碼實現一個十六進位制和ASCII的轉換方法。 hex() 轉換一個整數物件為十六進位制的字串 >>> hex(16) '0x10' >&
利用MYSQL的函式實現使用者登入功能,進出都是JSON(第二版)
利用MYSQL的函式實現使用者登入功能,進出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JSON, `srvjson` JSON ) RETURNS json LANGUAGE
socket程式設計readline函式實現回射伺服器/客戶端
為了解決粘包問題,reanline函式使用recv函式進行窺探,不清除內容 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/