C语言学习笔记--void关键字

Posted CrazyDiode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言学习笔记--void关键字相关的知识,希望对你有一定的参考价值。

1.C语言中Void关键字的含义

void 修饰函数返回值和参数——为了表示“无”,如果函数没有返回值,那么应该将其声明为 void,同样的,如果函数没有参数,也应该声明其参数为 void

//f()函数任意参数,返回值默认
f() 
{

}

//函数无参无返回值
void f(void)
{

}

2.C语言中不存在 void 变量

C 语言没有定义 void 究意是多大内存的别名,没有 void 标尺,无法在内存中裁出大小

#include<stdio.h>
int main()
{
  
    void var;//error,不能定义 void 型的变量
    void array[5];//error,不能定义 void 型的变量
    //在 ANSI C 编译器中无法通,支持 GNU 标准的 gcc 下为 void 大小为 1,是合的
    void* pv;可以定义void*的指针
    printf("sizeof(void)=%d\n",sizeof(void));
}

3.void 指针

(1)C 语言规定只有相同类型的指针才可以相互赋值

(2)void* 指针作为左值用于“接收”任意类型的指针

(3)void* 指针作为右值使用时需要进行强制类型转换

int* pI = (int*)malloc(sizeof(int));
char* pC = (char*)malloc(sizeof(char));
void* p = NULL;
int* pni = NULL;
char* pnc = NULL;
p =pI; //ok,void*指针 p 可接收任何类型的指针
pni= p; //error,void*须强制类型转换,即 pni =(int*)p;
p =pC; //ok
pnc= p; //error,应为 pnc=(char*)p;

通过 void*实现 MemSet 函数

#include <stdio.h>
void MemSet(void* src, int length, unsigned char n)
{
    unsigned char* p = (unsigned char*)src;
    int i = 0;
    for(i=0; i<length; i++)
    {
        p[i] = n;
    }
}
int main()
{
    int a[5];//这里可以是任何其他类型,如 char a[5];double a[5]等。
    int i = 0;
    MemSet(a, sizeof(a), 0);
    for(i=0; i<5; i++)
    {
        printf("%d\n", a[i]);
    }
    return 0;
}

 

以上是关于C语言学习笔记--void关键字的主要内容,如果未能解决你的问题,请参考以下文章

C语言笔记

Android内核源码bionic目录下的源码的学习笔记

[OC学习笔记]对象的本质探索

OC笔记一:Objective

学习笔记:python3,代码片段(2017)

C 语言restrict 关键字的概念及使用例子