Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 动态命名变量_C_Variables - Fatal编程技术网

C 动态命名变量

C 动态命名变量,c,variables,C,Variables,我正在创建n个线程。我想创建n个变量b1,b2,b3,,,bi,…bn。 我怎样才能用C来做这个?我的意思是根据线程的数量选择全局变量的名称 感谢您摘自的评论:“您不能。变量名只在编译时存在,而线程只在运行时存在。” 使用一个数组,数组中的元素数量与线程数量相同。然后使用线程的编号作为数组的索引 请参见下面的一些伪代码: #define THREAD_MAXIMUM (42) int b[THREAD_MAXIMUM]; thread_func(void * pv) { size_t

我正在创建n个线程。我想创建n个变量b1,b2,b3,,,bi,…bn。 我怎样才能用C来做这个?我的意思是根据线程的数量选择全局变量的名称

感谢您摘自的评论:“您不能。变量名只在编译时存在,而线程只在运行时存在。”

使用一个数组,数组中的元素数量与线程数量相同。然后使用线程的编号作为数组的索引

请参见下面的一些伪代码:

#define THREAD_MAXIMUM (42)

int b[THREAD_MAXIMUM];


thread_func(void * pv)
{
  size_t i = (size_t) pv;

  int bi = b[i];
  ...
}

int main()
{
  ...

  for(size_t i = 0; i < THREAD_MAXIMUM; ++i)
  {
     b[i] = some thread specific number;
     create-thread(thread_func, i) /* create thread and pass index to array element);
  }

  ...
}
#定义线程最大值(42)
int b[螺纹最大值];
线程函数(void*pv)
{
尺寸i=(尺寸)pv;
int bi=b[i];
...
}
int main()
{
...
对于(尺寸i=0;i<螺纹最大值;++i)
{
b[i]=某个特定于线程的编号;
创建线程(thread_func,i)/*创建线程并将索引传递给数组元素);
}
...
}
摘自的评论:“你不能。变量名只在编译时存在,而线程只在运行时存在。”

使用一个数组,数组中的元素数量与线程数量相同。然后使用线程的编号作为数组的索引

请参见下面的一些伪代码:

#define THREAD_MAXIMUM (42)

int b[THREAD_MAXIMUM];


thread_func(void * pv)
{
  size_t i = (size_t) pv;

  int bi = b[i];
  ...
}

int main()
{
  ...

  for(size_t i = 0; i < THREAD_MAXIMUM; ++i)
  {
     b[i] = some thread specific number;
     create-thread(thread_func, i) /* create thread and pass index to array element);
  }

  ...
}
#定义线程最大值(42)
int b[螺纹最大值];
线程函数(void*pv)
{
尺寸i=(尺寸)pv;
int bi=b[i];
...
}
int main()
{
...
对于(尺寸i=0;i<螺纹最大值;++i)
{
b[i]=某个特定于线程的编号;
创建线程(thread_func,i)/*创建线程并将索引传递给数组元素);
}
...
}

您可以尝试使用数组或向量(在C++中)。我更喜欢C++中的编码,而不是用矢量和数组来代替。 使用数组的简单实现可以如下所示-

#define MAX_THREAD(100)

int var[MAX_THREAD]

ThreadImpl(Params)
{
 int i = (int) Params;

 int vari = var[i];
}

int main()
{
  for(int i = 0; i < MAX_THREAD; ++i)
  {
    var[i] = val; (val can be ThreadID or other value as per requirement)     
    pthread_create(ThreadImpl, ... other params);
  }

 return 0;
}
#定义最大线程数(100)
int var[最大线程]
ThreadImpl(参数)
{
int i=(int)参数;
int vari=var[i];
}
int main()
{
对于(int i=0;i
您可以尝试使用数组或向量(在C++中)。我更喜欢C++中的编码,而不是用矢量和数组来代替。 使用数组的简单实现可以如下所示-

#define MAX_THREAD(100)

int var[MAX_THREAD]

ThreadImpl(Params)
{
 int i = (int) Params;

 int vari = var[i];
}

int main()
{
  for(int i = 0; i < MAX_THREAD; ++i)
  {
    var[i] = val; (val can be ThreadID or other value as per requirement)     
    pthread_create(ThreadImpl, ... other params);
  }

 return 0;
}
#定义最大线程数(100)
int var[最大线程]
ThreadImpl(参数)
{
int i=(int)参数;
int vari=var[i];
}
int main()
{
对于(int i=0;i
你不能。变量名只在编译时存在,而线程只在运行时存在。正如其他人所说,通过使用每个线程一个元素的数组,可以获得类似的效果。变量名只在编译时存在,而线程只在运行时存在。正如其他人所说,使用每个线程一个元素的数组可以获得类似的效果哎呀。。。我认为C++。请看修改后的答案。谢谢你让我知道@D图C中没有向量;)哎呀。。。我认为C++。请看修改后的答案。谢谢你让我知道@德沃斯