相关疑难解决方法(0)

在C,C++和C#中,void意味着什么?

希望得到" 无效 "一词来源的基础知识,以及为什么它被称为无效.这个问题的目的是帮助那些没有C经验的人,并突然看到一个基于C的代码库.

c c# c++ terminology language-design

163
推荐指数
4
解决办法
36万
查看次数

C编程中无效指针的概念

是否可以在C编程语言中取消引用void指针而不使用类型转换?

另外,有没有任何方法可以概括一个可以接收指针并将其存储在void指针中的函数,并且通过使用该void指针,我们可以创建一个通用函数吗?

例如:

void abc(void *a, int b)
{
   if(b==1)
      printf("%d",*(int*)a);     // If integer pointer is received
   else if(b==2)
      printf("%c",*(char*)a);     // If character pointer is received
   else if(b==3)
      printf("%f",*(float*)a);     // If float pointer is received
}
Run Code Online (Sandbox Code Playgroud)

我想在不使用if-else语句的情况下使这个函数变得通用 - 这可能吗?

此外,如果有很好的互联网文章解释了无效指针的概念,那么如果你能提供这些URL会很有用.

是否可以使用void指针进行指针算术?

c void-pointers

127
推荐指数
5
解决办法
20万
查看次数

void * function()是指向函数的指针还是返回void *的函数?

我对的含义感到困惑void *function()
它是指向函数的指针还是返回的函数void*?我一直在数据结构上使用它作为返回指针的递归函数,但是当我在多线程(pthread)中看到代码时,会有一个相同的函数声明。现在我很困惑他们之间有什么区别。

c c++ pointers function-pointers declaration

26
推荐指数
2
解决办法
1839
查看次数

从main调用pthread_exit可以吗?

当我打电话pthread_exitmain,程序永远不会终止.我期望程序完成,因为我退出程序的唯一线程,但它不起作用.好像挂了.

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int main(int argc, char *argv[])
{
    printf("-one-\n");

    pthread_exit(NULL);

    printf("-two-\n");
}
Run Code Online (Sandbox Code Playgroud)

Process Explorer显示(仅)线程处于Wait:DelayExecution状态.

根据pthread_exit文件:

在最后一个线程终止后,进程将以退出状态0退出.行为应该就像实现在线程终止时调用带有零参数的exit()一样.

我正在使用Dev-C++ v4.9.9.2pthreads-win32 v2.8.0.0(链接libpthreadGC2.a).

该库似乎是确定(例如,呼叫pthread_selfpthread_createmain正常工作).

是否有什么我不应该调用任何理由pthread_exitmain

c winapi program-entry-point pthreads exit

13
推荐指数
2
解决办法
1万
查看次数

在C中使用"void"

我很困惑为什么我们需要传递void给C函数:

int f(void) { return 0; }
Run Code Online (Sandbox Code Playgroud)

int f() { return 0; }
Run Code Online (Sandbox Code Playgroud)

什么是正确的做法,为什么?

c

11
推荐指数
2
解决办法
1819
查看次数

抛出void指针的原因是什么?

我从头开始学习C++,因此我对C语言没有专业的理解.在C++中,你不能把无效指针转换成什么,我理解背后的原因.但是,我知道在C中你可以.这有什么可能的原因?它似乎是类型安全的一个巨大漏洞,对我来说,这似乎是一件坏事.

c

6
推荐指数
1
解决办法
946
查看次数

为什么在printf中使用指针时会将其转换为(void*)p?

char  x = 'G';
char *p = &x;

printf ("Address of x: %p\n", p);
printf ("Address of x: %p\n", (void*)p);
Run Code Online (Sandbox Code Playgroud)

谁能告诉我究竟(void*)p意味着什么?我知道它是一样的p,因为它也给了我地址x,但为什么写的是(void*)p

c

6
推荐指数
1
解决办法
131
查看次数

具有 0 个参数的函数 - void vs void*?

我知道你可以像这样声明一个没有任何参数的函数:

void test()
{
    cout << "Hello world!!" << endl;
}
Run Code Online (Sandbox Code Playgroud)

但我也见过

void test(void)
{
    cout << "Hello world!!" << endl;
}
Run Code Online (Sandbox Code Playgroud)

void test(void*)
{
    cout << "Hello world!!" << endl;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是: usingvoidvoid*here 有什么区别?

c++ syntax void function-declaration function-definition

5
推荐指数
2
解决办法
240
查看次数

为什么程序员使用void*

我正在学习动力学数据结构,例如malloc功能.为什么有时程序员使用void*指针参数(例如)整数和字符的动态变量?有什么区别?有什么好处?

c pointers void dynamic-memory-allocation

2
推荐指数
1
解决办法
379
查看次数

将void指针作为C中的函数参数返回

我有一个返回数组的函数Data.数组的类型是intfloat.我想用void指针.如果outputType为0,则Data指向整数数组的指针,如果不是,则指向浮点数组.

是否可以在C中执行此操作?

void getData(void *Data , uint8_t outputType)
{
    ...

    int16_t acc[3]={0,0,0}; 

    ...

    acc[0] = (int16_t) ((data[1]*256+data[0]));
    acc[1] = (int16_t) ((data[3]*256+data[2]));
    acc[2] = (int16_t) ((data[5]*256+data[4]));

    Data = acc;

}
Run Code Online (Sandbox Code Playgroud)

在主要代码中:

int16_t output[3];
getData(output, 0);
Run Code Online (Sandbox Code Playgroud)

c pointers void

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

另一个无效*主题; 我只是要问,因为我很困惑

好吧,虽然堆栈上的详细信息void*,书籍喜欢The C Programming Language (K&R)The C++ Programming Language (Stroustrup).我学到了什么?这void*是一个没有推断类型的通用指针.它需要强制转换为任何已定义的类型,并且打印void*只会产生地址.

还有什么我知道的? void*不能被解除引用,到目前为止仍然是C/C++我发现了很多关于但很少理解的一个项目.

我知道它必须是强制转换的,*(char*)void*但对我来说没有任何意义的generic指针是我必须知道我需要什么类型来获取值.我是一名Java程序员; 我理解泛型类型,但这是我挣扎的事情.

所以我写了一些代码

typedef struct node
{
  void* data;
  node* link;
}Node;

typedef struct list
{
   Node* head;
}List;

Node* add_new(void* data, Node* link);

void show(Node* head);

Node* add_new(void* data, Node* link)
{
  Node* newNode = new Node();
  newNode->data = data;
  newNode->link = link;

  return newNode;
}

void show(Node* head)
{
  while …
Run Code Online (Sandbox Code Playgroud)

c99 void-pointers c++11

0
推荐指数
1
解决办法
65
查看次数

void*p =&i是什么意思?

在下面的代码中,如何使指针p存储i的地址?printf()里面的"*(float*)p"是什么意思?

#include
void main()
{
  int i = 10;
  void *p = &i;
  printf("%f\n", *(float *)p);
}
Run Code Online (Sandbox Code Playgroud)

c pointers

-2
推荐指数
1
解决办法
918
查看次数