1. 程式人生 > >指標的基本知識與常見錯誤

指標的基本知識與常見錯誤

指標的基本知識與常見錯誤


指標變數的定義

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複製給它,可以防止出現“野指標”