当前位置:  开发笔记 > 编程语言 > 正文

如何从方法中打印指针的值?

如何解决《如何从方法中打印指针的值?》经验,为你挑选了1个好方法。

基本上我有两个函数,主要有一个指针指向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创建的对象.

蚱蜢你应该明智地学习这个.



1> soulsabr..:

您需要将指针传递给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创建的对象.

蚱蜢你应该明智地学习这个.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有