void指針和NULL指針
阿新 • • 發佈:2019-01-27
字符串 ron 沒有 類型 很好 結果 數據 lov 打印字符
Void指針和NULL指針
Void指針:
Void指針我們稱之為通用指針,就是可以指向任意類型的數據。也就是說,任何類型的指針都可以賦值給Void指針。
舉例:
#include<stdio.h> int main () { int num = 666;//這裏定義為整型 int *pi = # char *ps = "I love XYT";//這裏為字符型 void *pv; pv = pi;//將整型賦值void指針 printf("pi:%p, pv:%p\n", pi, pv); pv = ps; //將字符型賦值給void指針 printf("ps:%p, pv:%p\n", ps, pv); //最後的結果是兩個地址一樣,可以正常賦值過去 return 0; }
無類型指針沒辦法進行解引用,所以可以強制轉換
例子:
#include<stdio.h> int main () { int num = 520;//這裏定義為整型 int *pi = # char *ps = "I love XYT";//這裏為字符型 void *pv; pv = pi; printf("pi:%p, pv:%p\n", pi, pv); printf("pv:%d\n", *(int *)pv);//這裏為強制轉換 pv = ps; printf("ps:%p, pv:%p\n", ps, pv); rintf("pv:%d\n", (char *)pv);//這裏為強制轉換,沒有*是因為打印字符串不需要 return 0; }
需要註意:使用void指針,不到必要的時候,不要亂用
NULL指針
如果一個指針不指向任何數據我們稱之為空指針,也叫NULL指針。
為什麽要用到NULL指針呢,當你還不清楚要將指針初始化為什麽地址時,請將它初始化為NULL;在對指針進行解引用時,先檢查該指針是否為NULL指針(用if),
#include<stdio.h>
int main ()
{
int *p1;
int *p2 = NULL;
printf("%d\n" *p1);
printf("%d\n" *p2);
return 0;
}
p1這種指針沒有什麽具體數據的,會亂指一氣,我們稱為野指針或者迷途指針
若對其解引用,如果地址是合法的,就會得到隨機的值
使用NULL指針的話,就會很好解決這個問題
對NULL指針進行解引用的時候,就會出現非法警告
void指針和NULL指針