所以我需要读取位中的标志并以位为单位设置标志.这些位有各种大小的整数:int16,int32,int64等.
我想有一个像这样的功能:
static integertype function(integertype data, char startbit, char endbit);
Run Code Online (Sandbox Code Playgroud)
我不想编码将在相同但相同的函数中为不同大小的整数隔离相同代码的代码(对于我想写的多个位函数).
我想过为数据使用void指针,所以一切都可以通过一个函数运行.这是一个糟糕的设计吗?效率怎么样?由于我的经验不足,我没有坏/好设计的概念.
static int function(void *data, char startbit, char endbit)
Run Code Online (Sandbox Code Playgroud)
必须经常查看这些标志,因为这是针对数据采集系统的.void指针实现是否合理有效?
我知道过早优化是不好的,但我想知道哪些东西通常比其他东西更少或更有效,所以我可以做出正确的决定.
提前谢谢你带我去学校.
我想通过C中的套接字发送/接收内存地址.我有以下内容:
void *ptr = malloc(122); /* So the pointer points to some valid address */
unsigned char *socketData = NULL;
socketData = (unsigned char*)malloc(sizeof(void*));
memset(socketData, 0, sizeof(void*));
/* ??? How to get the memory address - where ptr points to - to socketData ??? */
Run Code Online (Sandbox Code Playgroud)
我知道使用打印指针地址的方法printf是使用%p,即
printf("%p", ptr);
Run Code Online (Sandbox Code Playgroud)
但这打印例如0x0021ef1a.我想要的只是以下内容:0021ef1a
在接收方:如何将接收到的字节转换回void*?
啊:代码应该适用于32位以及64位系统;)此外代码应该使用-Wall -Werror编译....呵呵
谢谢你的帮助!周末愉快,乔纳斯
我正在使用用C编写的库,并且该库提供了仅使用void*的头文件.该库用于创建一种图形,该图形存储在C数据库中.标头将void*返回到图中的节点.要创建图形,我需要解析一堆节点名称.与节点名称堆栈并行,我需要为节点维护堆栈void*.我有这样的事情:
std::stack < void* > nodeStack;
while (!nodeNameStack.empty()) {
// check if nodeNamestack.front() meets some criteria
nodeStack.push(C_API_To_Create_Node(nodeNameStack.pop()));
// Do some processing
// check if nodeStack.size() >= 2
void *node1 = nodeStack.pop()
void *node2 = nodeStack.pop()
// Above line issues error saying void value not ignored as it ought to be..
Run Code Online (Sandbox Code Playgroud)
我不确定是什么问题,因为我们保证nodeStack大小至少为2.我会很感激任何克服此错误的建议.
我在一个我正在修补的程序中看到过这个:
static const void *method()
{
// other code
return anotherMethod(param1,param2);
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这将返回一个指向函数的指针.现在基于此,我试图弄清楚static const void应用于什么:
int f(void);
int *fip(); //Function returning int pointer
int (*pfi)(); //Pointer to function returning int
Run Code Online (Sandbox Code Playgroud)
那么添加的真正优点是什么static const(假设这适用于指定函数的返回值).此外,是否会调用函数的返回指针?或者它只是指向它的指针?因为从代码我有以下内容:
void start()
{
method();
}
Run Code Online (Sandbox Code Playgroud)
我假设它将被调用,否则它将被分配给指针.
我有无效指针,我想对它做指针运算.要这样做,我想将它转换为char指针.
( char * ) buf += current_size;
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我收到以下错误:
error: lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)
我也尝试在整个左侧添加括号,但没有成功.为什么我这样做?
如果p是指针(比如说int * p),那[p]意味着什么?还有什么4[p]意思?(即将标量乘以[p])
假设xyz是程序中定义的某种数据类型.然后是什么
void (*xyz)(void);
Run Code Online (Sandbox Code Playgroud)
声明的意思?
我想用C/C++创建一个通用链表(不使用C++模板).我写了以下简单的程序,它现在工作正常 -
typedef struct node
{
void *data;
node *next;
}node;
int main()
{
node *head = new node();
int *intdata = new int();
double *doubledata = new double();
char *str = "a";
*doubledata = 44.55;
*intdata = 10;
head->data = intdata;
node *node2 = new node();
node2->data = doubledata;
head->next = node2;
node *node3 = new node();
node3->data = str;
node3->next = NULL;
node2->next = node3;
node *temp = head;
if(temp != NULL)
{
cout<<*(int *)(temp->data)<<"\t";
temp = temp->next; …Run Code Online (Sandbox Code Playgroud) struct limit{
int up;
int down;
};
void *x;
struct limit *l;
l->up=1;
l->down=20;
x=l;
cout<<x->up;
Run Code Online (Sandbox Code Playgroud)
这是我的代码,我在最后一行得到错误的部分"无效*"不是一个指针到对象类型.我知道我的代码中的最后一行是错误的.我只想知道如何使用x变量打印上下值.
我计划T从void*以下方式给出的字节字段中读取一个类型:
template <class T>
T read(void* ptr){
return reinterpret_cast<T>(*ptr);
}
Run Code Online (Sandbox Code Playgroud)
但我有些疑惑:解除引用void*实际上是reinterpret_cast<T>什么?只是那个位置的字节?或"神奇地"长度的字节序列T?我应该先void*投入一个T*吗?
我想了解pthread.
但是,需要创建如下的线程方法:
void *SomeMethod(void* x)
{
//Do Something
}
Run Code Online (Sandbox Code Playgroud)
为什么有必要创建一个接受void指针的函数?我们不能使用像这样的函数的pthread吗?
void SomeMethod()
{
}
Run Code Online (Sandbox Code Playgroud) void-pointers ×10
c++ ×6
c ×5
pointers ×4
casting ×1
objective-c ×1
performance ×1
pthreads ×1
sockets ×1
stack ×1