void 类型修饰符(type specifier)表示“没有值可以获得”。因此,不可以采用这个类型声明变量或常量。void 类型可以用于下面各小节所描述的目的。

void用于函数声明

没有返回值的函数,其类型为 void。例如,标准库函数 perror() 被声明为以下原型:

void perror( const char * );

下面是另一个函数原型的声明,参数列表中的关键字 void 表示该函数没有参数:

FILE *tmpfile( void );

如果尝试进行函数调用,例如采用 tmpfile("name.tmp"),则编译器会报错。如果该函数声明时参数列表中未采用 void,则 C编译器就无法获得关于该函数参数的信息,因此,无法判断 tmpfile("name.tmp") 的调用是否正确。

void类型表达式

void 类型表达式指的是没有值的表达式。例如,调用一个没有返回值的函数,就是一种 void 类型表达式:

/**
*  快速入门C语言 https://xiecoding.cn/c/
**/
char filename[] = "memo.txt";
if ( fopen( filename, "r") == NULL )
    perror( filename );  // void表达式

类型转换(cast)运算(void)表达式显式地将表达式的返回值丢弃,例如,如下代码丢弃了函数返回值:

(void)printf("I don't need this function's return value!\n");

指向void的指针

一个 void* 类型的指针代表了对象的地址,但没有该对象的类型信息。这种“无数据类型”的指针主要用于声明函数,让函数可使用各种类型的指针参数,或者返回一个“多用途”的指针。

例如,标准内存管理函数:

void *malloc( size_t size );
void *realloc( void *ptr, size_t size );
void free( void *ptr );

如下例所示,可将一个 void 指针值赋值给另一个对象指针类型,反之亦可,这都不需要进行显式的类型转换。

演示 void 类型的用法:

/**
*  快速入门C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>
#include <time.h>
#include <stdlib.h> // 提供以下函数的原型
                    // void srand( unsigned int seed );
                    // int rand( void );
                    // void *malloc( size_t size );
                    // void free( void *ptr );
                    // void exit( int status };
enum { ARR_LEN = 100 };
int main ()
{
    int i, *pNumbers = (int*)malloc(ARR_LEN * sizeof(int));  //获得相同的存储空间
    if( pNumbers == NULL )
    {
        fprintf(stderr,"Insufficient memory.\n");
        exit(1);
    }
    srand((unsigned)time(NULL));  // 初始化随机数产生器
    for ( i=0; i < ARR_LEN; ++i )
        pNumbers[i] = rand() % 10000;  // 存储一些随机数
    printf("\n%d random numbers between 0 and 0000:\n", ARR_LEN);
    for ( i=0; i< ARR_LEN; ++i )                // 循环输出
    {
        printf("%6d",pNumbers[i]);  // 每次循环输出一个数字
        if ( i % 10 == 9) putchar( '\n');  // 每10个数字换一行
    }
    free( pNumbers );  // 释放存储空间
    return 0;
}

运行结果为: 

100 random numbers between 0 and 0000:
  3942  1520  4445  3651  5294   620   627  7532  7783  6534
  4793  6107  5841  7211  6188   285  1050  3527  1268  2137
  7737  9567  9114  2357  1309  8124  7930  9724  9942  1625
  4073  3870  1794  5632  7945   856  3723  6191  9434  2405
  7855  3120  6451  8469  3520  6185  3873  8718  5180   738
  4751  3872  6992  8965  2615  2477  7657  5819  3064  1257
   235  3444   537  2334  6102  1942  7372  5011  8789  6619
  9990  3694  8153  1684  3135  7959  4886  1027  3173  6976
  6891  2791  4166  5794  5576  6697  8141  4201  1691  5287
  7932  1810  4332   190  5532  9284  2266  2445  4321  6765

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐