C 語言基礎(chǔ)教程

C 語言流程控制

C 語言函數(shù)

C 語言數(shù)組

C 語言指針

C 語言字符串

C 語言結(jié)構(gòu)體

C 語言文件

C 其他

C 語言參考手冊

C 語言 void指針

到目前為止,我們已經(jīng)研究了分配給指針的地址應(yīng)該與指針聲明中指定的類型相同。 例如,如果我們聲明了int指針,則此int指針不能指向float變量或某種其他類型的變量,即它只能指向int類型的變量。 為了克服這個問題,我們使用了指向void的指針。 指向void的指針表示可以指向任何數(shù)據(jù)類型的通用指針。 我們可以將任何數(shù)據(jù)類型的地址分配給void指針,并且可以將void指針分配給任何類型的指針,而無需執(zhí)行任何顯式的類型轉(zhuǎn)換。

void指針的語法

void *pointer name;

下面給出了void指針的聲明:

void *ptr;

在上面的聲明中,void是指針的類型,而'ptr'是指針的名稱。

讓我們看一些示例:

int i=9;         //整型變量的初始化。

int *p;         // 整數(shù)指針聲明。

float *fp;         // 浮點(diǎn)指針聲明。

void *ptr;         //void指針聲明。

p=fp;         // 錯誤.

fp=&i;         // 錯誤

ptr=p;         // 正確

ptr=fp;         // 正確

ptr=&i;         // 正確

C語言中void指針的大小

C語言中void指針的大小與字符類型的指針的大小相同。指向void的指針的表示形式與字符類型的指針相同。指針的大小將根據(jù)所使用的平臺而有所不同。

讓我們看下面的實(shí)例:

#include <stdio.h>
int main()
{
    void *ptr = NULL; //void 指針
    int *p  = NULL;// 整型指針
    char *cp = NULL;//字符指針
    float *fp = NULL;//浮點(diǎn)指針
    //void指針的大小
    printf("void指針的大小 = %d\n\n",sizeof(ptr));
    //整型指針的大小
    printf("整型指針的大小 = %d\n\n",sizeof(p));
    //字符指針的大小
    printf("字符指針的大小 = %d\n\n",sizeof(cp));
    //浮點(diǎn)指針的大小
    printf("浮點(diǎn)指針的大小 = %d\n\n",sizeof(fp));
    return 0;
}

輸出結(jié)果

void指針的大小 = 4

整型指針的大小 = 4

字符指針的大小 = 4

浮點(diǎn)指針的大小 = 4

void指針的優(yōu)點(diǎn)

以下是void指針的優(yōu)點(diǎn):

  • malloc()和calloc()函數(shù)返回void指針,因此這些函數(shù)可用于分配任何數(shù)據(jù)類型的內(nèi)存。

#include <stdio.h>
#include<malloc.h>
int main()
{
   int a=90;
 
   int *x = (int*)malloc(sizeof(int)) ;
   x=&a;
   printf("x指針?biāo)赶虻闹?nbsp;: %d",*x);
    return 0;
}

輸出結(jié)果

x指針?biāo)赶虻闹?nbsp;: 90
  • C中的void指針也可以用于實(shí)現(xiàn)C中的泛型函數(shù)。

為什么我們使用void指針?

由于其可重用性,我們使用void指針。void指針可以存儲任何類型的對象,并且我們可以通過使用帶有適當(dāng)類型轉(zhuǎn)換的間接操作符來檢索任何類型的對象。

讓我們通過一個實(shí)例來理解。

#include<stdio.h> 
int main() 
{ 
  int a=56; //初始化一個整數(shù)變量'a'。
  float b=4.5; //浮點(diǎn)變量'b'的初始化。
  char c='k'; //字符變量'c'的初始化。
   void *ptr; //聲明空指針。
   // 為變量“a”分配地址。
   ptr=&a;
   printf("a的值為 : %d",*((int*)ptr));
   //為變量'b'分配地址。
   ptr=&b;
   printf("\nb的值為 : %f",*((float*)ptr));
   //為變量'c'分配地址。
   ptr=&c;
    printf("\n c的值為 : %c",*((char*)ptr));
    return 0;
}

輸出結(jié)果

a的值為 : 56
b的值為 : 4.500000
 c的值為 : k
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清