指標的基本知識與常見錯誤
阿新 • • 發佈:2018-12-28
指標的基本知識與常見錯誤
指標變數的定義
float* pointer_1;
int* pointer_2;
基型別* 變數名
指標的意義在於間接訪問資料
指標的初始化
int a;
int*p=&a;
指標變數的賦值
int* p,a=123;
p=&a;
//或
int* p;
int a=123;
p=&a;
使用指標常犯的錯誤總結:
錯誤一:
int* p,a=123;
*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複製給它,可以防止出現“野指標”