亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解C語言的void*空指針

 更新時(shí)間:2022年03月29日 10:51:55   作者:熠熠L  
這篇文章主要為大家詳細(xì)介紹了C語言的void*空指針,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

在C語言中,void稱為無類型,相應(yīng)的void*稱為無類型指針或者空指針類型。

void的應(yīng)用

對(duì)函數(shù)返回值的限定。

例如void func(int);該函數(shù)沒有返回值。對(duì)函數(shù)參數(shù)類型的限定。

例如int func(void);該函數(shù)沒有參數(shù),不允許接收參數(shù)。

空指針類型(void*)

空指針類型的變量void* pvoid;可以指向任意類型的數(shù)據(jù),任何類型的指針也可以直接賦值給空指針類型的變量。

#include <stdio.h>


int main()
{
    char c, *pc;
    int i, *pi;
    double d, *pd;
    void *pvoid;

    pc = &c;
    pvoid = pc;
    printf("pvoid = %p  &c = %p\n", pvoid, &c);
    pi = &i;
    pvoid = pi;
    printf("pvoid = %p  &i = %p\n", pvoid, &i);
    pd = &d;
    pvoid = pd;
    printf("pvoid = %p  &d = %p\n", pvoid, &d);

}


/*
輸出結(jié)果
pvoid = 000000000061FDFF  &c = 000000000061FDFF
pvoid = 000000000061FDF8  &i = 000000000061FDF8
pvoid = 000000000061FDF0  &d = 000000000061FDF0
*/

但是如果空指針類型的變量賦值給任意指針類型的變量,就需要強(qiáng)制轉(zhuǎn)換;也就是顯式說明該指針指向的內(nèi)存中是存放的什么類型的數(shù)據(jù)。

void *pvoid;
int *pi;
char *pc;
double *pd;

pi = (int*)pvoid;
pc = (char*)pvoid;
pd = (double*)pd;

另外,以下有些需要注意的地方。

在 ANSI C 標(biāo)準(zhǔn)中,不允許對(duì) void 指針進(jìn)行一些算術(shù)運(yùn)算如 p++ 或 p+=1 等。因?yàn)榧热?void 是無類型,那么每次算術(shù)運(yùn)算我們就不知道該操作幾個(gè)字節(jié),例如 char 型操作 sizeof(char) 字節(jié),而 int 則要操作 sizeof(int) 字節(jié)。而在 GNU 中則允許,因?yàn)樵谀J(rèn)情況下,GNU 認(rèn)為 void * 和 char * 一樣,既然是確定的,當(dāng)然可以進(jìn)行一些算術(shù)操作,在這里sizeof(*p)==sizeof(char)。

int i;
void *pvoid;
pvoid = &i;
printf("%p\n", pvoid);
pvoid++;//ANSI:錯(cuò)誤;GNU:正確
pvoid += 1;//ANSI:錯(cuò)誤;GNU:正確
printf("%p\n", pvoid);

在實(shí)際的程序設(shè)計(jì)中,為迎合 ANSI 標(biāo)準(zhǔn),并提高程序的可移植性,我們可以這樣編寫實(shí)現(xiàn)同樣功能的代碼:

((int*)pvoid)++;
(int*)pvoid += 1;

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

 

相關(guān)文章

最新評(píng)論