嗨,
我想知道是否有可能在不使用heap(malloc / calloc)的情况下实现这种假设? 像这样:
typedef struct {
void* par1_;
void* par2_;
}parameters;
和另一个位置:
typedef struct {
short x;
short y;
}position;
这是一个被线程调用的函数。
void* car(void* arg)
{
parameters car_type = *((parameters*) arg);
int first_par = *(int*)&car_type.par1_;
int second_par = *(int*)&car_type.par2_; // can I do this?
//if yes how do I extract now values from position struct "pos.x and pos.y"
}
在主线程中,我要标记“位置”结构中的位置,将该结构分配给第二个参数“ par2_”,然后将其发送到我的功能车中。
int main()
{
parameters pars;
position pos;
pos.x = 44;
pos.y = 25;
pars.par1_ = (void*) CAR_TYPE; // Global Variable
pars.par2_ = &pos; // not sure about this?
pthread_t tid;
pthread_create(&tid, NULL, car, (void*) &pars);
pthread_join(tid, NULL);
很抱歉,如果这是一个愚蠢的问题。显然,我是新手。再一次,我不想使用堆。这是我程序的最小示例。
答案 0 :(得分:0)
我认为您想要更多类似的东西;
Open C4;
LOOP
FETCH c4 into o_var;
EXIT WHEN c4%NOTFOUND;
dbms_output.put_line('v_calc_id: ' || v_calc_id || ', hr: ' || o_var.hr);
insert into calc (calc_id, calc_Date, calc_name, report_dt, create_dt)
values(null, sysdate, 'TEST', o_var.hr, sysdate);
END LOOP
Close C4;
尽管您可能只想更改参数结构以包含您真正想要的类型。
void* car(void* arg)
{
parameters car_type = *((parameters*) arg);
int first_par = car_type.par1_; // This is CAR_TYPE is it really an int?
position *second_par = (position *)car_type.par2_;
second_par->x, second_par->y;
}
答案 1 :(得分:0)
不确定您要问的是什么,因此,我将为您提供与情况有关的标准建议。
在将指针传递到堆栈存储器时,请非常小心。始终牢记以下三点:
要重申:
要做:
#include <stdio.h>
int main(int argc, char *argv[]) {
int nums = {12, 630, 43, 0};
printf("%d", sum(nums));
}
int sum(int *num_pointer) {
int count = 0;
for (; *num_pointer; num_pointer += 1) {
add(&count, *num_pointer);
}
return count;
}
void add(int *a, int b) {
*a += b;
}
不要:
int main(int argc, char *argv[]) {
print_int(get_int(7));
}
int *get_int(int value) {
return &value;
}
void print_int(int *num) {
printf("%d", *num);
}
此外,在不需要时也不要键入。这是一个糟糕的程序设计的重要信号。考虑修改它。