Swap函式的寫法及其常見錯誤示例
Swap函式的寫法及其常見錯誤示例
資料交換在程式設計過程中十分常見,為方便起見,我們可以編寫一個函式Swap,用於兩個變數之間的資料交換,需要交換兩個變數的值呼叫函式Swap即可。但在編寫Swap函式的過程中,容易出現一些常見錯誤,下面便給出正確的寫法及其常見錯誤示例。
錯誤示例1:
void Swap(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
上面寫法的錯誤點在於沒有使用指標,被呼叫函式(子函式)中的同名變數值無法傳遞到主調函式(父函式)中;不同函式中的同名變數雖然變數名一樣,但他們的地址並不相同,這就導致被呼叫函式中的兩個變數交換了,而主調函式中的變數並未發生交換。該錯誤類似於定義在for迴圈裡的迴圈變數i無法傳遞到當前函式。
類似錯誤示例:
#include <stdio.h>
int main()
{
int i=0;
for(int i=0;i<2;i++)
{
;
}
printf("%d\n",i);
}
錯誤示例2:
void Swap(int *p1,int *p2)
{
int *tmp;
tmp=p1;
p1=p2;
p2=tmp;
}
該寫法錯誤點在於沒有出現解引用,雖然兩個變數的地址發生了交換,但是他們的數值並未發生交換。假設要交換的變數是a和b,原先指向a的指標是p1,指向b的指標是p2;兩個指標交換後指向a的指標是p2,指向b的是p1;就相當於交換了變數a和變數b的地址,a和b的值並沒有交換。
錯誤示例3:
void Swap(int *p1,int *p2)
{
int *tmp;
*tmp=*p1;
*p1=*p2;
*p2=*tmp;
}
改寫法錯誤是出現了野指標,即指標*tmp沒有初始化,他沒有指向的變數,計算機沒有訪問地址的許可權,這個地址可能存在,也可能不存在。就好比定義了一個整型變數a,在沒有給a賦值的情況下輸出a,也會出現類似的錯誤報告。該寫法可修改為在定義一個整型變數x,把x的地址賦值給tmp即可完成交換。修改後的程式碼如下:
void Swap(int *p1,int *p2)
{
int *tmp;
int x;
tmp=&x;
*tmp=*p1;
*p1=*p2;
*p2=*tmp;
}
正確寫法示例:
#include <stdio.h>
void Swap(int *p1,int *p2)
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
int main()
{
int a=10;
int b=20;
Swap(&a,&b);
printf("%d %d\n",a,b);
return 0;
}
相關文章
- django | 常見 SQL 及其對應的 ORM 寫法DjangoSQLORM
- 常見的80004005錯誤及其解決方法 (轉)
- Python常見工廠函式用法示例Python函式
- SQL Server 連線常見錯誤及其處理方法SQLServer
- Excel小技巧-公式和函式使用的常見八種錯誤合集Excel公式函式
- 常見的web錯誤Web
- PHP編譯安裝時常見錯誤解決辦法,php編譯常見錯誤PHP編譯
- 響應式原型的7個常見錯誤原型
- 幾種常見窗函式及其MATLAB實現函式Matlab
- MySQL 常見錯誤MySql
- oracle 常見錯誤Oracle
- 常見的錯誤 SQL 用法SQL
- 常見python資料型別及其相對應的函式Python資料型別函式
- Go 常見錯誤集錦 | 字串底層原理及常見錯誤Go字串
- Go常見錯誤集錦 | 字串底層原理及常見錯誤Go字串
- sqlcode 函式捕捉異常錯誤號SQL函式
- mysql replication常見錯誤MySql
- WCF分散式開發常見錯誤(27):Securechannelcannotbeopened分散式
- Go常見錯誤第15篇:interface使用的常見錯誤和最佳實踐Go
- 常見的 PostgreSQL 升級錯誤SQL
- js作用域的常見錯誤JS
- 常見函式之單行函式函式
- WCF分散式開發常見錯誤(28):Therequestedupgradeisnotsupportedby…分散式
- PbootCMS中常見的錯誤提示及其解決方案boot
- MySQL 安裝常見錯誤MySql
- mysql8 常見錯誤MySql
- Oracle之Rman常見錯誤Oracle
- MySQL Replication常見錯誤整理MySql
- Hadoop常見錯誤2Hadoop
- opencv 編譯常見錯誤OpenCV編譯
- 幾個常見函式的非常見用法函式
- SSL證書常見的錯誤和解決辦法是什麼?
- 常見的授權錯誤及原因
- 常見的錯誤日誌型別型別
- Git相關 | Git 常見的錯誤Git
- Web開發常見性的錯誤Web
- mdxbuilder打包mdx時的常見錯誤UI
- php常見的危險函式PHP函式