天天看點

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

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

指針變量的定義

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

繼續閱讀