C语言void关键字

void关键字

1.类型:
  • void 是“空类型”。
  • void 则为“空类型指针”,void 可以指向任何类型的数据。
2.void
  1. 作用:

    对函数返回的限定
    对函数参数的限定

  2. void a

    1. 说明:因为void为无类型,在内存中偏移量为0,它声明变量a,a在内存中没有空间,所以无法定义且后面无法赋值从而报错。

    2. 变量赋值条件:

      1.”=”左边要指向一个有效的地址
      2.”=”左边指向的有效的地址需要有可用的内存的空间

3.void作用:
  • 如果函数没有返回值,那么应声明为void 类型。

    凡是函数不加返回值类型的都当做int处理


    add (int a, int b)
    {
        return a + b;
    }
  • 如果函数无参数,那么应声明其参数为void

    函数不接受参数,如果不声明为void,则会出错

fun()
{
    return 1;
}
int main()
{
    printf("%d\n", fun(2));
    return 0;
}

注:上面的程序在C中结果为1,在C++中编译出错:'fun' : function does not take 1 parameters

4.void指针:
  • 说明:
    int main()
    {
        void *pvoid;
        pvoid++;   //ANSI错误    GNU正确
        pvoid += 1;   //ANSI错误   GNU正确

        //进行算法操作的指针必须确定知道它指向的数据类型的大小,也就是说确定的知道内存目的地址的确切值


        int *pint;
        pint++;   //ANSI正确

        //避免 GNU 和 ANSI 的出现的不一致

        void *pvoid;
        (char *)pvoid++;   //ANSI正确; GNU正确
        (char *)pvoid += 1;   //ANSI错误;  GNU正确
        return 0;
    }

注意:尽量使用ANSI的标准

  • 函数返回值和参数的类型:

    这种情况在写一些通用代码的函数的时候特别灵活

    /*下面的是一些系统函数,可以实现多种类型的操作,相对字符串的str函数灵活许多*/
    void * memcpy(void *dest, const void *src, size_t len);
    void * memset ( void * buffer, int c, size_t num );
    void * memmove(void *dest, const void *src, int count);
    void *my_memccpy(void *dest, const void *src, char ch, int count);

注:void指针体现了C语言对内存的操作(不区分类型)

5.参考:
在C语言中,`void`关键字主要用于表示“无类型”或“无返回值”,其高级使用方法包括以下几种: 1. **函数返回类型**: - 当函数不需要返回值时,可以使用`void`作为返回类型。例如: ```c void printHello() { printf("Hello, World!\n"); } ``` 2. **函数参数**: - 当函数不需要参数时,可以使用`void`作为参数列表,以明确表示函数不接受任何参数。例如: ```c int getValue(void) { return 42; } ``` 3. **指针类型**: - `void*`是一种通用指针类型,可以指向任何类型的数据,但在解引用时需要先进行类型转换。例如: ```c void* ptr; int num = 10; ptr = &num; printf("%d", *(int*)ptr); // 需要强制类型转换 ``` 4. **函数指针**: - 可以使用`void`来定义函数指针,表示该函数指针可以指向任何返回类型为`void`的函数。例如: ```c typedef void (*FuncPtr)(void); void myFunction() { printf("This is my function.\n"); } FuncPtr func = myFunction; func(); // 调用函数 ``` 5. **动态内存分配**: - `malloc`和`calloc`等函数返回`void*`,可以分配任意类型的内存。例如: ```c int* arr = (int*)malloc(10 * sizeof(int)); free(arr); // 记得释放内存 ``` 6. **回调函数**: - 在事件驱动编程或回调机制中,`void`函数常被用作回调函数。例如: ```c void callback() { printf("Callback executed.\n"); } void registerCallback(void (*cb)(void)) { cb(); // 调用回调函数 } registerCallback(callback); ``` 7. **类型安全**: - 使用`void*`时需要注意类型安全,避免错误的类型转换导致未定义行为。 8. **可变参数函数**: - 在定义可变参数函数时,可以使用`void`来确保函数没有固定参数。例如: ```c #include <stdarg.h> void logMessage(const char* format, ...) { va_list args; va_start(args, format); vprintf(format, args); va_end(args); } ``` ### 总结 `void`关键字在C语言中非常灵活,可以用于函数返回类型、参数列表、指针类型、函数指针、动态内存分配、回调函数等场景。正确使用`void`可以提高代码的灵活性和可读性,但同时也需要注意类型安全和内存管理的问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值