怎么将一个函数中的局部变量用指针调用到另一个函数中去
如何将一个函数中的局部变量用指针调用到另一个函数中去
如题如何解决
static UINT Keyhsq(VOID) / / VOID改成int *
{
int i, j, k, a[5],rto[50], temp1, temp2, m, t;
srand((unsigned)time(NULL));
t = rand()%3 + 1;
for(k = 0; k < 5; k++)
{
loop: temp1 = rto[k] = rand()%50;
for(m = 0; m < k; m++)
if(temp1 == rto[m])
goto loop;
if(temp1 == 0)
goto loop;
else m++;
}
for(i = 0; i < 5; i++)
{
loop1:temp2 = a[i] = rand()%6;
for(j = 0; j < i; j++)
if(temp2 == a[j])
goto loop1;
if(temp2 == 0)
goto loop1;
else j++;
}
return 0
}
STDCALL VOID KeyOuthsq(VOID)
{
U8 *NoiOt;
U8 *RtOChoose;
u8 NoiOtIoNumChoose;
NoiOtIoNumChoose = Keyhsq(t);
NoiOt = Keyhsq(a[i]);
uTry = Keyhsq();
RtOChoose = Keyhsq(rto[k]);
}
上面keyhsq()函数中的a[ i ]、rto[ k ]、t; 要如何经过指针,或其他方式实现在keyouthsq()函数上调用。或者在全局变量中定义之后如何实现keyhsq()函数对其赋值运算,之后再keyouthsq()函数中调用。
(PS:初学C,还请各路大神多多指点)
------解决思路----------------------
你定义为全局变量 ,在任何一个子函数中都可以使用了。
------解决思路----------------------
函数内部的局部变量,在函数调用返回时,就已经无效了,返回指针当然可以访问,但是无意义了!
原因:x86下,每次函数调用,都要在栈上生成一个新的栈帧,局部变量就在此栈帧中进行分配,当函数返回时,此栈帧就要撤销。
假设A call B, 从B中返回一个局部变量的指针p,然后A call C,那么p可能就指向了函数C的局部变量,因为B返回后再调C,栈帧就重新分配给C了
------解决思路----------------------
既然是局部变量, 那就不要想了, 这是危险的, 结果是不可预知的.
可以是局部静态变量,全局变量等等
------解决思路----------------------
同一文件可以static,否则只能全局,这种变量在小程序无所谓,程序大了就要小心
------解决思路----------------------
使用全局变量不会麻烦死人的。
不使用全局变量也不会爽死人的。

------解决思路----------------------
------解决思路----------------------
赵老师已经给了这个问题和答案了.
全局变量即是全局的, 你的上一个函数可以把运算结果保存到这个全局变量中, 下一个函数就可以使用这个全局变量得到上一个函数运算的值.
我把赵老师的代码给你注释下
------解决思路----------------------
函数里用局部指针, 局部指针返回
如题如何解决
static UINT Keyhsq(VOID) / / VOID改成int *
{
int i, j, k, a[5],rto[50], temp1, temp2, m, t;
srand((unsigned)time(NULL));
t = rand()%3 + 1;
for(k = 0; k < 5; k++)
{
loop: temp1 = rto[k] = rand()%50;
for(m = 0; m < k; m++)
if(temp1 == rto[m])
goto loop;
if(temp1 == 0)
goto loop;
else m++;
}
for(i = 0; i < 5; i++)
{
loop1:temp2 = a[i] = rand()%6;
for(j = 0; j < i; j++)
if(temp2 == a[j])
goto loop1;
if(temp2 == 0)
goto loop1;
else j++;
}
return 0
}
STDCALL VOID KeyOuthsq(VOID)
{
U8 *NoiOt;
U8 *RtOChoose;
u8 NoiOtIoNumChoose;
NoiOtIoNumChoose = Keyhsq(t);
NoiOt = Keyhsq(a[i]);
uTry = Keyhsq();
RtOChoose = Keyhsq(rto[k]);
}
上面keyhsq()函数中的a[ i ]、rto[ k ]、t; 要如何经过指针,或其他方式实现在keyouthsq()函数上调用。或者在全局变量中定义之后如何实现keyhsq()函数对其赋值运算,之后再keyouthsq()函数中调用。
(PS:初学C,还请各路大神多多指点)
------解决思路----------------------
你定义为全局变量 ,在任何一个子函数中都可以使用了。
------解决思路----------------------
函数内部的局部变量,在函数调用返回时,就已经无效了,返回指针当然可以访问,但是无意义了!
原因:x86下,每次函数调用,都要在栈上生成一个新的栈帧,局部变量就在此栈帧中进行分配,当函数返回时,此栈帧就要撤销。
假设A call B, 从B中返回一个局部变量的指针p,然后A call C,那么p可能就指向了函数C的局部变量,因为B返回后再调C,栈帧就重新分配给C了
------解决思路----------------------
既然是局部变量, 那就不要想了, 这是危险的, 结果是不可预知的.
可以是局部静态变量,全局变量等等
------解决思路----------------------
同一文件可以static,否则只能全局,这种变量在小程序无所谓,程序大了就要小心
------解决思路----------------------
使用全局变量不会麻烦死人的。
不使用全局变量也不会爽死人的。
------解决思路----------------------
#include <stdio.h>
int g_var;
void fun1() {
gvar++;
}
void fun2() {
gvar*=2;
}
int main() {
g_var=1;
fun1();
fun2();
printf("%d\n",g_var);
return 0;
}
------解决思路----------------------
!!!要是定义了全局变量,要怎么实现在上一个函数里运算,下一个函数里调用上一个函数运算的值。!!!
赵老师已经给了这个问题和答案了.
全局变量即是全局的, 你的上一个函数可以把运算结果保存到这个全局变量中, 下一个函数就可以使用这个全局变量得到上一个函数运算的值.
我把赵老师的代码给你注释下
#include <stdio.h>
int g_var; //全局变量 定义
void fun1() {
gvar++; //fun1中计算修改了全局变量, 相当于你计算了一个值, 保存在全局变量中了.
}
void fun2() {
gvar*=2; //第二个函数中直接使用这个全局变量, 它不但使用这上一个函数的计算结果, 自己也会计算并保存一个值到全局变量中
}
int main() {
g_var=1;
fun1(); //执行完这个, g_var = 2; 内部自加1了
fun2(); //执行完这个函数 g_var = 4; 内部使用上个函数计算结果2, 然后2*2=4
printf("%d\n",g_var); //这里会输出4
return 0;
}
------解决思路----------------------
函数里用局部指针, 局部指针返回