标签: void

什么是C#中的void**?

我正在查看使用C编写的库的C#程序源代码.我遇到了这一行并且不确定它是什么:

cvbimUNSAFE.GetImageVPA ((cvbim.IMG)cvImg.Image, 0, (void**)&lpImageBits, &pVPAT);
Run Code Online (Sandbox Code Playgroud)

什么是类型的对象void **?我做了一些谷歌搜索,只能找到有关的信息void*,如果我理解正确,这是一个指向所有顶级类型的指针.

c c# pointers void

9
推荐指数
1
解决办法
7143
查看次数

有没有办法比较两个void指针在C中断言相同的类型?

我正在学习C并在C​​中尝试粗略实现链表.长话短说我有一个只包含一个void指针(元素)的结构和另一个指向下一个节点的指针.(代码要遵循)我的问题是,当通过时头节点和其他一些节点成新函数,有没有办法确保两个元素属于同一类型?两个节点应该能够保存任何类型的数据.我已经尝试与sizeof()进行比较,但我无法顺从void指针.提前致谢!

struct Node{
    void* element;
    struct Node* next;
}
Run Code Online (Sandbox Code Playgroud)

这是节点的代码,我只需要一种方法将它们与assert进行比较,以确保链接列表具有所有相同的元素类型!谢谢!

c assert pointers void

9
推荐指数
1
解决办法
1271
查看次数

C++将任何类型的参数发送给函数

这就是:我想创建一个void函数,它将接收两个众所周知的值类型,另一个可以是任何值.代码如下:

void change_settings(string element, short setting, ??? value) {
    switch (setting) {
        case ST_NAME:
            // Cast value to string or char* and change element.name
        break;
        case ST_AMOUNT:
            // Cast value to integer and change element.amount
        break;
        case ST_ENABLED:
            // Cast value to boolean and change element.enabled
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图制作值的类型,const void*但我得到一个错误(cast from ‘const void*’ to ‘short int’ loses precision),因为我只是这样做:short name = (short)value,这必须是一些疯狂的绝望审判,希望能够幸运.现在,我不知道是否有办法做到这一点,传递任何类型的变量的指针然后将其转换为它是什么(我知道根据每种情况的变量类型.我将如何做到这一点?谢谢!

c++ types arguments function void

9
推荐指数
3
解决办法
8765
查看次数

Haskell Data.Void:undefined变成无限循环

我注意到有关Voidhaskell Data.Void模块中的类型的一件事,这很奇怪,我非常想知道为什么它是这样的.未定义应该是一个存在于每种类型的值(在我的理解中),和

undefined :: Type
Run Code Online (Sandbox Code Playgroud)

应该屈服

*** Exception: Prelude.undefined
Run Code Online (Sandbox Code Playgroud)

它适用于我尝试的每种数据类型,除了Void. undefined :: Void根本没有终止,相同absurd undefined.现在我认为这不是一个问题,因为它Void代表了一种不会发生的价值,但我仍然想知道导致这种行为的原因.

haskell void

9
推荐指数
1
解决办法
156
查看次数

为什么我不能直接在函数中返回Void

在test1()中,它可以返回test()成功返回的Void.但在test2()中,错误抛出.为什么?

//: Playground - noun: a place where people can play

import UIKit
import AVFoundation

func test()->Void{
    print("Hello")
}

func test1(){//print Hello
    return test()
}

func test2(){// throw error
    return Void
}
Run Code Online (Sandbox Code Playgroud)

return function void swift

9
推荐指数
1
解决办法
3675
查看次数

不寻常的编译器错误转换为void?

我正在为我正在教授的课程安排一个基于C++的作业.我有一个函数,我要向学生出口,我希望他们在他们的课程中的不同点上打电话,这样在评分期间,我们可以拦截这些电话,以确保他们在正确的时间做正确的事情.我不希望该代码在提供的启动文件中执行任何操作,因此我只给了函数一个只有一系列语句的主体,这些语句会转换所有参数void以禁止编译器有关未使用参数的警告.在这样做的过程中,我遇到了一个我以前从未见过的不寻常的编译器错误,并且对此站点的搜索没有发现任何有用的信息.

这个简化的测试用例可以最好地说明错误:

void iDontUseMyArguments(int a, int b) {
    (void) a;    // Explicit cast to void - totally fine!
    (void) b;
}

void iDontEither(int a, int b) {
    (void) a, b;  // Comma expression casted to void, though technically
                  // b isn't casted to void!
}

void norDoI(int a, int b) {
    void(a, b);   // ERROR! No idea why this isn't okay.
}

void meNeither(int a, int b) {
    (void)(a, b); // Comma expression casted to void - …
Run Code Online (Sandbox Code Playgroud)

c++ casting void comma-operator most-vexing-parse

9
推荐指数
1
解决办法
227
查看次数

无效与单位相对应

我想了解这两个编程概念之间的区别.第一个表示缺少数据类型,后者表示存在类型,但没有信息.另外,我认识到Unit来自函数式编程理论基础,但我仍然无法理解单元原语的可用性是什么(例如,在F#程序中).

f# functional-programming void unit-type

8
推荐指数
2
解决办法
1047
查看次数

为什么java.lang.Void不能序列化?

默认情况下可以序列化原语'void',为什么对象'Void'不能扩展Serializable?

添加示例:

RootImplementation将有一个编译错误,说"Void不在其范围内",因为它没有扩展Serializable.虽然将'someMethod'声明为'void',但这不是问题.

public interface Root<R extends Serializable> extends Serializable {
  R someMethod();
}

public class RootImplementation implements Root<Void> {
  public Void someMethod() {
    return null;
  }
}
Run Code Online (Sandbox Code Playgroud)

java void

8
推荐指数
1
解决办法
1957
查看次数

void在void中做了什么?

返回类型 - 方法返回的值的数据类型,如果方法未返回值,则返回void.

http://download.oracle.com/javase/tutorial/java/javaOO/methods.html

好的,那么..这是我的问题:

public class EnumTest {
    Day day;

    public EnumTest(Day day) {
        this.day = day;
    }

    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY: System.out.println("Mondays are bad.");
                         break;

            case FRIDAY: System.out.println("Fridays are better.");
                         break;

            case SATURDAY:
            case SUNDAY: System.out.println("Weekends are best.");
                         break;

            default:     System.out.println("Midweek days are so-so.");
                         break;
        }
    }

    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay …
Run Code Online (Sandbox Code Playgroud)

java void

8
推荐指数
2
解决办法
14万
查看次数

要理解无效指针

在我的回答中,我提到解除引用void指针是一个坏主意.但是,当我这样做时会发生什么?

#include <stdlib.h>
int main (void) {
 void* c = malloc(4);
 *c;
 &c[0];
}
Run Code Online (Sandbox Code Playgroud)

汇编:

gcc prog.c -Wall -Wextra
prog.c: In function 'main':
prog.c:4:2: warning: dereferencing 'void *' pointer
  *c;
  ^~
prog.c:5:4: warning: dereferencing 'void *' pointer
  &c[0];
    ^
prog.c:5:2: warning: statement with no effect [-Wunused-value]
  &c[0];
  ^
Run Code Online (Sandbox Code Playgroud)

这是来自Wandbox的图片,对于那些说它没有发生的人:

在此输入图像描述

Live demoIdeone中的一个.

它实际上会尝试读取c指向的内存,然后获取该结果,但实际上什么都不做?或者这条线根本没有效果(但GCC不会产生警告).

我在想,既然编译器对数据类型一无所知,在不知道类型大小的情况下,它将无法做很多事情.

为什么derefencing a void*不会产生错误,只是警告?


如果我尝试作业,我会收到错误:

无效使用void表达式

但不应该单独解除引用会产生错误吗?

c gcc pointers void

8
推荐指数
2
解决办法
1134
查看次数