本文目录一览:
- 1、如何传递同一个数组作为多个函数参数进行操作?
- 2、(1) 如何向线程对应的函数传递参数?一个参数如何传递,多个参数如何传递? (2) 深入理解线程与进程的
- 3、当一个函数有多个形参时,那么该函数再被调用时,实参值传递给形参时,传递的先后顺序是怎样的呢?
如何传递同一个数组作为多个函数参数进行操作?
问题有点不能理解。
1、C语言里面不管有多个函数,执行的过程肯定有个先后顺序。不能并行执行。
你要把一个数组传递个多个函数,第一个函数操作数组后数组肯定发生了变化
2、每个数组的内容是一样的?
那么你可以每个函数里面定义一个数组,这样用的时候就把参数数组拷贝到函数里面定义的数组
3、还有一种比较笨重的方法。申请一个数组备份你要传递参数的数组。每次传递完后。把备份数组拷贝到你要传递的参数上。
(1) 如何向线程对应的函数传递参数?一个参数如何传递,多个参数如何传递? (2) 深入理解线程与进程的
构造一个结构体,其中的成员即为想要传递的参数类型。实例化一个结构体变量obj,将指向该结构体变量obj的指针赋给lpParameter即可。
简单举例:
。。。。。
struct DATA
{
int a;
int b;
int c;
};
DATA d = {1,2,3};
void ThreadName1(LPVOID lpParameter);
static HANDLE hHandle1=NULL;
DWORD dwThreadID1;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
hHandle1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName1,(LPVOID) d ,0,dwThreadID1);
CloseHandle(hHandle1);
ExitThread(0);
return nRetCode;
}
void ThreadName1(LPVOID lpParameter)//参数为int型,传参成功
{
DATA *p = (DATA *)lpParameter;//类型转换
printf(“a = %d\n”,p-a);
printf(“b = %d\n”,p-b);
printf(“c = %d\n”,p-c);
}….
即可实现多参数的传递。
当一个函数有多个形参时,那么该函数再被调用时,实参值传递给形参时,传递的先后顺序是怎样的呢?
这个问题是依赖于编译器实现的,你只需知道目前大多数编译器把C代码翻译成的汇编码都是把参数从右至左压栈的,在函数里使用某个参数时,并不会出栈,仅仅引用一个地址,如果你想了解其中的细节问题,可以看看INTEL汇编语言程序设计.并不是我不想在这里解释,说起来可能非常长篇,也未必能讲得有书上那么好.
但是你又不应该在你的代码里依赖于这些C++标准没有规定的顺序,考虑以下语句,
int i = 1;
printf(“%d, %d\n”, i++, i++);
会输出什么?
以我的VC9为例,在Debug版本中输出是2, 1(从右至左压栈的结果,没错);
而在release版本中输出的却是1,1,看反汇编会发现,编译器优化生成汇编码时直接用1替换i++表达式了.
原创文章,作者:GBKDQ,如若转载,请注明出处:https://www.506064.com/n/329194.html