基本上我有两个函数,主要有一个指针指向c
(可变内存地址).我的问题是为什么我不能从print
函数调用指针并打印出字符串.另外,如果我有一个类文件并想从那里调用指针(不向print函数添加参数),该怎么办?
#include#include using namespace std; static int print(){ cout << *pointer; } int main() { string c = "Hello World!"; string *pointer = new string; pointer = &c; print(); return 0; }
soulsabr.. 5
您需要将指针传递给print函数,因为它不是全局的.
static int print(string* pointer)
这应该工作得很好.
此外,您的线路有内存泄漏
string *pointer = new string;
并使用它来调用它
print(pointer);
分配并永远不会删除新的字符串对象.你可能想用
string *pointer = NULL
代替.此外,using namespace
可能导致问题.确保你有充分的理由这样做,而不是避免键入一些额外的字符.
编辑:
正如这里建议的那样,快速缩小范围.
查看范围的方式有点像对象的生命以及谁可以看到它.您创建的对象(不使用new)具有一个范围,直到它超出代码块.是阻止函数,条件语句或循环.此外,只能通过创建它的代码BELOW来查看对象.
void foo() { Bar b; /** really cool code **/ }
这里,整个函数可以看到Bar类型的对象b.一旦函数结束b"超出范围"并自动调用析构函数.注意:使用NEW创建的指针不会发生这种情况.
void foo() { Bar b1; for(size_t index = 0; index < 10; ++index) { /** some cool code **/ Bar b2; /** some equally cool code **/ } if(false) { Bar b3; /** some useless code **/ } /** really cool code **/ }
这里,整个函数可以看到b1.b2只能通过for循环中的"同样很酷的代码"来看到."酷代码"无法看到它,因为它在它下面声明.最后,b3永远不会被任何东西看到,因为条件总是假的.一旦每个对象"超出范围",在函数结尾处为b1,在循环结束时为b2,系统将负责调用析构函数.
这是范围的基础.注意:如果您使用关键字NEW创建指向对象的指针,那么您必须在某处删除该对象.范围仅适用于指针(例如Bar*b_ptr),而不适用于使用NEW创建的对象.
蚱蜢你应该明智地学习这个.
您需要将指针传递给print函数,因为它不是全局的.
static int print(string* pointer)
这应该工作得很好.
此外,您的线路有内存泄漏
string *pointer = new string;
并使用它来调用它
print(pointer);
分配并永远不会删除新的字符串对象.你可能想用
string *pointer = NULL
代替.此外,using namespace
可能导致问题.确保你有充分的理由这样做,而不是避免键入一些额外的字符.
编辑:
正如这里建议的那样,快速缩小范围.
查看范围的方式有点像对象的生命以及谁可以看到它.您创建的对象(不使用new)具有一个范围,直到它超出代码块.是阻止函数,条件语句或循环.此外,只能通过创建它的代码BELOW来查看对象.
void foo() { Bar b; /** really cool code **/ }
这里,整个函数可以看到Bar类型的对象b.一旦函数结束b"超出范围"并自动调用析构函数.注意:使用NEW创建的指针不会发生这种情况.
void foo() { Bar b1; for(size_t index = 0; index < 10; ++index) { /** some cool code **/ Bar b2; /** some equally cool code **/ } if(false) { Bar b3; /** some useless code **/ } /** really cool code **/ }
这里,整个函数可以看到b1.b2只能通过for循环中的"同样很酷的代码"来看到."酷代码"无法看到它,因为它在它下面声明.最后,b3永远不会被任何东西看到,因为条件总是假的.一旦每个对象"超出范围",在函数结尾处为b1,在循环结束时为b2,系统将负责调用析构函数.
这是范围的基础.注意:如果您使用关键字NEW创建指向对象的指针,那么您必须在某处删除该对象.范围仅适用于指针(例如Bar*b_ptr),而不适用于使用NEW创建的对象.
蚱蜢你应该明智地学习这个.