1. 程式人生 > >void指針和NULL指針

void指針和NULL指針

字符串 ron 沒有 類型 很好 結果 數據 lov 打印字符

Void指針和NULL指針

Void指針:

Void指針我們稱之為通用指針,就是可以指向任意類型的數據。也就是說,任何類型的指針都可以賦值給Void指針。

舉例:

#include<stdio.h>
int main ()
{
    int num = 666;//這裏定義為整型 
    int *pi = &num;
    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 = &num;
    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指針