首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“void*”和“void* (* function )(void *)”初始化、强制转换和函数指针调用之间的区别?

void是C语言中的一种特殊类型,表示一个指向未知类型的指针。它可以用来存储任意类型的指针,但不能直接解引用或进行算术运算。void通常用于在函数之间传递指针,而不需要关心具体的数据类型。

void* (* function )(void )是一个函数指针,它指向一个参数为void类型,返回值为void*类型的函数。这种函数指针可以用来调用具有不同参数和返回值类型的函数。

区别:

  1. 初始化:void可以直接赋值为任意类型的指针,而void (* function )(void *)需要通过函数指针的类型来初始化,即指向具有相同参数和返回值类型的函数。
  2. 强制转换:void可以通过强制类型转换将其转换为其他类型的指针,而void (* function )(void *)不能直接进行强制类型转换,因为它是一个函数指针类型。
  3. 函数指针调用:void不能直接调用函数,需要先将其转换为具体类型的指针,然后才能调用函数。而void (* function )(void *)可以直接通过函数指针调用函数,无需进行类型转换。

总结: void是一个指向未知类型的指针,用于在函数之间传递指针,而void (* function )(void *)是一个函数指针,用于指向具有相同参数和返回值类型的函数,并可以直接调用函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

void 在 JS TS 中区别

// 每日前端夜话 第588 篇 // 正文共 1200 字 // 预计阅读时间:7 分钟 如果你用过传统强类型语言,可能会很熟悉 void 概念:一种类型,告诉你函数方法在调用时不返回任何内容...其次,这是一种调用立即调用函数好方法: void function() { console.log('What') }() 所有这些都没有污染全局命名空间: void function aRecursion...总是返回 undefined,而 void 总是计算它旁边表达式,你有一个非常简洁方法从函数返回而不返回一个值,但仍然调用一个回调例如: // 返回除 undefined 以外其他内容会使程序崩溃...function iHaveNoReturnValue(i: number): void void 作为类型也可以用于参数所有其他声明。...如果你想确保传递只返回 undefined 函数(如“nothing”),请确保调整你回调方法签名: - function doSomething(callback: () => void) { +

3.9K20

一文看懂any,never,voidunknown区别

如果你也有同样困惑,那么就请跟着本篇文章彻底搞懂这四种类型区别吧。...这里值得一提是any只能作为临时过渡方案,我们最后结果一定是确保代码尽可能少any出现 我们不关心对象类型:例如我们实现了一个print函数,这个函数底层调用console.log,这个时候其实我们不需要关心传进来具体数据类型是什么...void void其实可以理解为nullundefined联合类型,它表示空值。...void一个更加常见使用场景是表示某个函数没有任何返回值: function noReturnValue(): void { console.log('hello') // 代码没有任何返回值...,所以这个函数返回值是void } 使用场景 这里只想说明一下voidnever区别

77630

初识指针指针指针变量、如何理解地址、指针类型意义、void*指针、野指针、空指针)(笔记)

指针所指向内存区: 在函数调用时就会创建一个栈桢,在栈桢中内存被划分为一个一个单元, 其中每个内存单元能存放8个比特位(一个字节),每个单元也有一个编号。...), 但是硬件硬件之间相互独立,故用"线"连接起来(物理上), 而CPU内存之间也有大量数据交互,所以两者也用线连接起来。...*指针:无具体指针(泛型指针) 这种类型指针可以用来接受任意类型地址,但也有局限性, void*类型指针,局限性在于他不能直接进行指针+-整数和解引用运算 有什么用: 一般void...*类型指针是使用在函数参数部分,用来接收不同数据类型地址, 这样可以实现泛型编程效果,使得一个函数来处理多种类型数据 注意: void*类型指针不能直接进行解引用操作 void...指针初始化 2.指针越界访问造成野指针 3.指针指向空间释放 1.

11910

cc++区别 (一)函数默认值、内联函数函数重载cc++之间相互调用

一.函数默认值 c++支持给函数形式参数进行默认初始化,其规则为从右向左依此初始化。 还有以下需要注意几点: 1.定义处可以不给出形参默认值,在声明处可以给出形参默认值。...因为递归函数调用次数只有在执行完毕才能确定,而内联函数处理实在编译阶段根据上述规则进行处理。而递归函数没有给编译器提供这样规则。 内联函数函数区别?...内联函数static函数区别?...3.不能以返回值不同作为判断重载条件,因为返回值类型符符号生成无关。 4.对实参值是否有影响,如被const/volatile修饰*(指针)/&(引用)可以作为函数重载前提条件。...四.cc++之间相互调用 在实际应用当中,有时候会发生这样事情,c程序可能需要调用一些优秀c++程序接口,而在c++程序中也可能需要调用优秀c程序接口,这样就需要提供这样相互调用机制

69110

CC++函数指针指针函数

函数指针赋值 函数指针其他指针一样定义之后使用之前也是需要初始化。...这个函数没有参数,没有返回值。 第二步:通过(void(*) ())0,可以明白这是将0强制转换函数指针类型,0是一个地址,也就是说一个函数存在首地址为0一段区域内。...让程序跳转到绝对地址为0x0113F90C 方法一: 将0x0113F90C地址强制转换函数指针类型,即: (void (*)())0x0113F90C 然后调用:((void (*)())0x0113F90C...* 类型,在调用时候强制转换返回值为自己想要类型。...其输出结果是一样,不过不建议这么使用,因为强制转换可能会带来风险。返回类型可以是任何基本类型复合类型。返回指针函数用途十分广泛。

92710

c++之内存分配、命名空间、强制类型转换学习总结

: 1、static_cast强制类型转换: 用于基本类型之间转换 不能用于基本类型指针之间转换 用于有继承关系类对象之间转换指针之间转换 代码解析: #include ...不能用在基本类型指针之间进行强制转换。...2、const_cast强制类型转换: 用于去除变量只读属性 强制类型转换目标类型必须是指针或者引用 代码解析: #include void const_cast_demo()...3、reinterpret_cast强制类型转换: 用于指针类型之间强制转换 用于整数指针类型之间强制转换 代码解析: #include void reinterpret_cast_demo...4、dynamic_cast强制类型转换(暂时有些概念没有学到,先记住结论): 用于有继承关系指针之间转换 用于有交叉关系指针之间转换 具有类型检查功能 需要虚函数支持 代码分析: #include

47830

《逆袭进大厂》之C++篇49问49答

3、指针引用区别 指针是一个变量,存储是一个地址,引用跟原来变量实质上是同一个东西,是原变量别名 指针可以有多级,引用只有一级 指针可以为空,引用不能为NULL且在定义时必须初始化 指针初始化后可以改变指向...mallocfree返回void类型指针(必须进行类型转换),newdelete返回是具体类型指针。 deletedelete[]区别? delete只会调用一次析构函数。.../whlook/p/6501918.html 28、拷贝初始化直接初始化 当用于类类型对象时,初始化拷贝形式直接形式有所不同:直接初始化直接调用与实参匹配构造函数,拷贝初始化总是调用拷贝构造函数...当拷贝构造函数为private时:语句3语句4在编译时会报错 使用explicit修饰构造函数时:如果构造函数存在隐式转换,编译时会报错 C++直接初始化与复制初始化区别:https://blog.csdn.net...第一个例子用到了空类型指针void*,第二个例子则是在两个类型指针之间进行强制转换。因此,想保证程序类型安全性,应尽量避免使用空类型指针void*,尽量不对两种类型指针强制转换

1.9K10

《逆袭进大厂》之C++篇49问49答(绝对干货)

3、指针引用区别 指针是一个变量,存储是一个地址,引用跟原来变量实质上是同一个东西,是原变量别名 指针可以有多级,引用只有一级 指针可以为空,引用不能为NULL且在定义时必须初始化 指针初始化后可以改变指向...mallocfree返回void类型指针(必须进行类型转换),newdelete返回是具体类型指针。 deletedelete[]区别? delete只会调用一次析构函数。.../whlook/p/6501918.html 28、拷贝初始化直接初始化 当用于类类型对象时,初始化拷贝形式直接形式有所不同:直接初始化直接调用与实参匹配构造函数,拷贝初始化总是调用拷贝构造函数...当拷贝构造函数为private时:语句3语句4在编译时会报错 使用explicit修饰构造函数时:如果构造函数存在隐式转换,编译时会报错 C++直接初始化与复制初始化区别:https://blog.csdn.net...第一个例子用到了空类型指针void*,第二个例子则是在两个类型指针之间进行强制转换。因此,想保证程序类型安全性,应尽量避免使用空类型指针void*,尽量不对两种类型指针强制转换

2.5K40

CC++面试题之语言基础篇(一)

new 返回指针,不需要进行类型转换;malloc 返回void *(无类型指针)。...需要手动将其转换为适当类型 new 会调用构造函数初始化对象(如果是自定义类对象),而 malloc 不会执行构造函数void * void * 是通用指针类型,被称为"无类型指针"。...使用 void * 指针时需要谨慎,必须进行类型转换 示例(int 型转换): int * intPtr=static_case(ptr); 因为不提供类型检查,可能导致运行时类型错误。...,会影响实参值; void baz(int *x) { *x = *x * 2; // 修改原始数据 } 堆区别 C++ 有几种构造函数 默认构造函数:默认构造函数没有参数,它用于创建对象默认初始化...// 处理右值引用 } std::move 是什么 std::move用于将左值强制转换为右值引用,然后原来x变成空串。

20510

C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

在该函数前添加extern “C”声明。由于编译后名字不同,C++程序不能直接调用C 函数。 4、指针引用区别是什么?...,malloc返回void*指针,需要强制类型转换 new可以被重载,malloc不能 10、newdelete是如何实现?...使用命名强制类型转换函数const_cast时,只能改变运算对象底层const。...当拷贝构造函数为private时:语句3语句4在编译时会报错。 使用explicit修饰构造函数时:如果构造函数存在隐式转换,编译时会报错。 31、初始化赋值区别?...: 重写是父类子类之间垂直关系,重载是不同函数之间水平关系 重写要求参数列表相同,重载则要求参数列表不同,返回值不要求 重写关系中,调用方法根据对象类型决定,重载根据调用时实参表与形参表对应关系来选择函数

1.9K20

真没想到nullptrNULL得区别,大了去了

第3章 转向现代C++ 条款7:在创建对象时注意区分(){} //创建对象时候注意区分 () {} //指定初始化方式有:小括号,等号,大括号 //情况1:内建型别来说 int 初始化赋值没有区别...int x(1); int y = 2; int z{3}; int zz = {4};//等号+{}也是可以 //对于用户定义型别 初始化赋值区别大了 //对于用户定义型别 初始化赋值区别大了.../不可行 //结论:可见 {} 初始化方式比较统一,但是注意它有一项新特性: //禁止内建型别之间进行隐式型别转换,如果大括号内表达式无法保证能够采用进行初始化对象来表达,则代码不能通过编译 double...//区别一:处理函数指针理解性 //区别一:处理函数指针理解性 //FP型别是一个指涉到函数指针,该函数形参包括一个 int 一个 const std::string&, 没有返回值 typedef...//1,void*指针,无法对其进行自增,自减得操作 //2,char* 指针表示得式C风格得字符串,不是指涉到单个字符得指针 //假定采用这两个型别时拒绝调用,不可以使用 void* char*

1.7K30

c++系列之二 指向成员函数指针(烧脑)

*fptr) (p->*fptr) 两边括号是语法所强制要求。 成员函数指针不是常规指针 成员函数指针不像常规指针那样保存某个“准确”地址。...但是,如果是成员函数指针之间相互转换呢?...,所以即使进行强制转换,依然调用是Foo类f()函数)。...结论 简单总结一下,通过上述文章,我们学到了: 成员函数指针声明定义语法 使用成员指针选择操作符来调用成员函数语法 使用 typedef 写出更加清晰代码 非虚成员函数、虚函数、静态成员函数之间区别...成员函数指针常规指针对比 不同情形下成员函数指针转换规则 如何使用成员函数指针数组来解决特定设计问题 编译器是如何解释成员函数调用 扩展:成员变量指针 http://luodw.cc/2015

2.9K20

整理了70道C语言与C++常见问答题

= NULL) 4 结构体可以直接赋值吗 声明时可以直接初始化,同一结构体不同对象之间也可以直接赋值,但是当结构体中含有指针“成员”时一定要小心。...21 指针常量与常量指针区别 指针常量是指定义了一个指针,这个指针值只能在定义时初始化,其他地方不能改变。...无论在什么平台地址长度整型数据长度是一样, 即一个整型数据可以强制转换成地址指针类型,只要有意义即可。...26 简述指针常量与常量指针区别 指针常量是指定义了一个指针,这个指针值只能在定义时初始化,其他地方不能改变。...「注意」:无论是指针常量还是常量指针,其最大用途就是作为函数形式参数,保证实参在被调用函数不可改变特性。 27 如何避免“野指针指针变量声明时没有被初始化

3K01

基础知识_Cpp

实现一个shared_ptr智能指针 4.5. shared_ptr线程安全性 4.6. C++11四种强制类型转换 4.7. 列表初始化 4.8. decltype作用以及与auto区别。...虚函数是实现运行时多态一种机制,比如两个父类指针分别指向子类A子类B实例,父类指针调用函数时,会根据不同子类来调用不同函数。...指针引用区别 指针也是一个变量,里面存储内容是一个地址。而引用本质上是一个常量指针,引用只允许初始化,不能再修改。 编译指针引用代码,在汇编上是一样:c++中,引用指针区别是什么?...参数是要分配字节数,返回void*类型指针,返回值一般需要强制类型转换才能使用。 如果申请内存失败会返回NULL。 可以用realloc扩容,使用free释放内存。...隐式转换都建议使用 static_cast 进行标明替换。 在有类型指针void *之间转换,不能使用static_cast在有类型指针转换。 // 1.

1.9K30

C语言中void具体有什么作用

众所周知,如果指针p1p2类型相同,那么我们可以直接在p1p2间互相赋值;如果p1p2指向不同数据类型,则必须使用强制类型 转换运算符把赋值运算符右边指针类型转换为左边指针类型。...*则不同,任何类型指针都可以直接赋值给它,无需进行强制类型转换void *p1; int *p2; p1 = p2; 但这并不意味着,void *也可以无需强制类型转换地赋给其它类型指针...规则二如果函数无参数,那么应声明其参数为void 在C++语言中声明一个这样函数: int function(void) { return 1; } 则进行下面的调用是不合法...: function(2); 因为在C++中,函数参数为void意思是这个函数不接受任何参数。...规则四如果函数参数可以是任意类型指针,那么应声明其参数为void * 典型的如内存操作函数memcpymemset函数原型分别为: void * memcpy(void *dest,

1.8K20

又在函数指针上面犯错了

因此为了告诉编译器代码这里没有问题,程序员可以使用强制类型转换来将一段内存转换为需要数据类型,例如下面有一个数组a,现在将其强制转换为一个结构体类型stu: #include typedef...函数指针调用如下: 为了确认函数指针本质上是传递给call指令一个函数地址,下面用一个简单例子说明: 上面是编译后汇编指令,可以看到,使用函数指针调用函数时,其汇编指令多了如下: 0x4015e3...最常见是file_operations结构体,该结构体一般来说只需要初始化常见函数,不需要全部初始化。...); return 0; } 上面的代码中TaskA_CallBack是回调函数,该函数形参为一个函数指针,而FFT_Function是一个被调用函数。...可以看到回调函数中申明函数指针必须调用函数类型完全相同。

9010

C++复习篇

转换 9.拷贝构造函数 10.构造函数初始化列表 11.析构函数 12.const成员函数 13.const对象 14.栈、堆、静态存储区区别 15.静态成员变量/静态成员函数 16.友元friend...操作符重载实现:类型转换函数 20.explicit显式调用(用来阻止隐式转换) 21.父类子类中同名成员/函数 22.子类对象初始化父类对象 23.父类对象初始化子类对象 24.纯虚函数vertual...种转换 static_cast(静态类型转换) 用于变量对象之间转换,比如(bool,char,int等) 用于有继承关系类对象指针转换,可以通过父类对象去初始化子类对象(注意只能初始化父类那部分...const对象是编译阶段概念,运行时无效 const对象可以通过const_cast强制转换来实现改变其中成员变量值 14.栈、堆、静态存储区区别 栈 用来存放函数局部变量,当调用某个函数时...C++方式强制转换   Test t4(num);            //手工调用构造函数   return 0; } 21.父类子类中同名成员/函数 子类可以定义父类中同名成员同名函数 子类中成员变量函数将会隐藏父类同名成员变量函数

1.3K20
领券