指針的基本知識與常見錯誤
指針變量的定義
float* pointer_1;
int* pointer_2;
基類型* 變量名
指針的意義在于間接通路資料
指針的初始化
int a;
int*p=&a;
指針變量的指派
int* p,a=;
p=&a;
//或
int* p;
int a=;
p=&a;
使用指針常犯的錯誤總結:
錯誤一:
int* p,a=;
*p=a;
**結果:
Error C4700 uninitialized local variable ‘p’ used C語言**
錯因:
由于指針變量p沒有初始化,很可能是指向了系統中某一具有功能的記憶體位址,此時再對其指派很有可能會造成緻命錯誤
錯誤二:
int *p=NULL;
int a;
p=&a;
printf("%d\n",*p);
**結果:
沒有任何輸出**
錯因:
由于把指針變量初始化為符号常量NULL,也就是0。記憶體位址初始化為0,實際上運作時編譯器并沒有給指針p配置設定記憶體空間,是以p是無法對任何資料記憶體位址進行通路。故沒有任何傳回值。
錯誤三:
在函數定義中的錯誤
//定義一個交換兩個變量的函數
void swap(int*p1,int*p2)
{
int*temp=p1;
p1=p2;
p2=temp;
}
**結果:
函數并沒有發揮作用,沒有交換兩個數**
錯因:
因為swap函數中隻是對形參指針的值進行操作,由于形參的值無法傳回實參,是以無意義。正确的寫法應該是:
void swap(int*p1, int*p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
合理使用空指針來防止出現bug
其實是在指針做完某件事後,暫時把NULL複制給它,可以防止出現“野指針”