c++一个函数怎么调用另一个函数中的参数?
答案:6 悬赏:10 手机版
解决时间 2021-12-04 11:27
- 提问者网友:却不属于对方
- 2021-12-03 17:59
c++一个函数怎么调用另一个函数中的参数?
最佳答案
- 五星知识达人网友:等灯
- 2021-12-03 19:32
{
public:
A()
{
printf("In A::(). m_x=%d\n", m_x);
A(0);
printf("Out A::(). m_x=%d\n", m_x);
}
A(int x)
{
printf("In A::(int x). x=%d\n", x);
m_x=x;
}
private:
int m_x;
};
这里第11行的调用A(0);只是构建了一个A的临时对象,并没有调用A(int x)来初始化自己。其运行结果是:
点击(此处)折叠或打开
[root@tivu25 utcov]# ./UTest.out
In A::(). m_x=4268020
In A::(int x). x=0
Out A::(). m_x=4268020
可以看到尽管调用了A(0),m_x仍然没有改变,是4268020.
正确的方法是使用placement new:
点击(此处)折叠或打开
//A.h
#ifndef _A_H_
#define _A_H_
#include
#include
class A
{
public:
A()
{
printf("In A::(). m_x=%d\n", m_x);
new(this) A(0);
printf("Out A::(). m_x=%d\n", m_x);
}
A(int x)
{
printf("In A::(int x). x=%d\n", x);
m_x=x;
}
private:
int m_x;
};
#endif
public:
A()
{
printf("In A::(). m_x=%d\n", m_x);
A(0);
printf("Out A::(). m_x=%d\n", m_x);
}
A(int x)
{
printf("In A::(int x). x=%d\n", x);
m_x=x;
}
private:
int m_x;
};
这里第11行的调用A(0);只是构建了一个A的临时对象,并没有调用A(int x)来初始化自己。其运行结果是:
点击(此处)折叠或打开
[root@tivu25 utcov]# ./UTest.out
In A::(). m_x=4268020
In A::(int x). x=0
Out A::(). m_x=4268020
可以看到尽管调用了A(0),m_x仍然没有改变,是4268020.
正确的方法是使用placement new:
点击(此处)折叠或打开
//A.h
#ifndef _A_H_
#define _A_H_
#include
#include
class A
{
public:
A()
{
printf("In A::(). m_x=%d\n", m_x);
new(this) A(0);
printf("Out A::(). m_x=%d\n", m_x);
}
A(int x)
{
printf("In A::(int x). x=%d\n", x);
m_x=x;
}
private:
int m_x;
};
#endif
全部回答
- 1楼网友:慢性怪人
- 2021-12-04 01:16
如果无法把p定义为全局变量,就定义一个可以指向p的全局指针。
int * pointer = nullptr;void a()
{
int p;
pointer = &p;
cin >> p;
}
void b()
{
cout << *pointer:
}
- 2楼网友:持酒劝斜阳
- 2021-12-04 00:19
可以全局变量,或是用返回值,共用指针,对象
- 3楼网友:执傲
- 2021-12-03 22:58
如果是一般函数,不能这么用,你可以把p定义为全局变量,就可以用。如果是c++,将这2个函数定义为成员函数,p为成员变量,也可以用
- 4楼网友:上分大魔王
- 2021-12-03 22:02
如果另一个函数中的参数是该函数的动态局部变量,那是不可能的,除非想点其他办法,比如说跟踪该局部变量生成的地址,并且在该局部变量的生存期内调用。但是这样我不知道有什么意义。
如果另一个函数中的参数的变量是函数的局部静态变量static,那么也可以,不过得想点办法。那就是跟踪该静态变量初始化时的地址。由于静态变量都在全局数据区分配内存,不管是全局的还是局部的。那么只要找到其初始化时的地址就可以了,到时候直接在函数内操作这个变量的内存地址。
如果另一个函数中的参数的变量不一定是局部变量的话,那么你可以定义为全局变量,这样的话就可以操作了。上面两种方式,我不知道有什么意义,除非搞crack的。
如果另一个函数中的参数的变量是函数的局部静态变量static,那么也可以,不过得想点办法。那就是跟踪该静态变量初始化时的地址。由于静态变量都在全局数据区分配内存,不管是全局的还是局部的。那么只要找到其初始化时的地址就可以了,到时候直接在函数内操作这个变量的内存地址。
如果另一个函数中的参数的变量不一定是局部变量的话,那么你可以定义为全局变量,这样的话就可以操作了。上面两种方式,我不知道有什么意义,除非搞crack的。
- 5楼网友:舊物识亽
- 2021-12-03 20:38
一个函数,就象你的函数a其中的变量只在函数被调用时才生成和起作用,函数执行结束,变量p就失效了,所以它的值无法在函数执行后被保存。
如果想在函数执行结束后还能保存,需要在变量定义前加个“静态”的修饰,如:static int p;但这还是不能被函数以外的语句直接访问。
那么就需要将函数的值想办法传出来,或者直接将p的定义提到函数外成为全局变量。
如果想在函数执行结束后还能保存,需要在变量定义前加个“静态”的修饰,如:static int p;但这还是不能被函数以外的语句直接访问。
那么就需要将函数的值想办法传出来,或者直接将p的定义提到函数外成为全局变量。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯