如何从方法中打印指针的值
How do I print the value of a pointer from within a method?
基本上我有两个函数,main有一个指向c
(可变内存地址)的指针。我的问题是为什么我不能从print
函数调用指针并打印出字符串。此外,如果我有一个类文件,并且想从那里调用指针(而不向print函数添加参数),该怎么办。
#include <iostream>
#include <string>
using namespace std;
static int print(){
cout << *pointer;
}
int main() {
string c = "Hello World!";
string *pointer = new string;
pointer = &c;
print();
return 0;
}
您需要将指针传递到打印函数中,因为它不是全局的。
static int print(string* pointer)
这应该很好用。
此外,您的线路存在内存泄漏
string *pointer = new string;
并使用进行调用
print(pointer);
分配并从不删除新的字符串对象。你可能想使用
string *pointer = nullptr;
相反。此外,using namespace <whatever>
可能会导致问题。确保你这样做是有充分理由的,不要避免键入一些额外的字符。
编辑:
正如这里所建议的,这是一个范围的快速缩小。
查看范围的方式有点像对象的生命以及谁能看到它。你创建的对象(不使用new)有一个范围,直到它从代码块中掉出来。无论是块、函数、条件语句还是循环。此外,该对象只能由创建它的下面的代码看到。
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永远不会被任何东西看到,因为条件总是false。一旦每个对象"超出范围",b1在函数末尾,b2在循环末尾,系统就会负责调用析构函数。
这是范围的基础。注意:如果您曾经使用关键字NEW来创建指向对象的指针,那么您必须在某个位置删除该对象。作用域仅适用于指针(比如Bar*b_ptr),而不适用于使用NEW创建的对象。
蚱蜢,你最好好好学习。
为什么我不能从print函数调用指针并打印出字符串
print()函数内部不知道*指针是什么,因为它是在main()的作用域中声明的,而不是作为参数传递的。你可以将"指针"声明为全局变量,但你到底为什么要这么做?
为什么您反对将指针作为参数传入?
在这种情况下的声明将是
void print(string* pointer){
cout << *pointer << endl;
}
呼叫代码将是简单的
print(pointer);
无独有偶,你为什么做了print static int的返回签名?空隙是好的。您不会从函数中返回任何值。
此外,这里的"新"是完全不必要的
string *pointer = new string;
因为您要指向的资源已经存在。"new"字符串正是这样做的——为新字符串创建空间。
这已经足够了
string c = "Hello World!";
string *pointer = &c;
- 为什么我的函数无法使用指针打印多维数组的元素?
- 对象指针打印结果以相反的顺序进行
- 使用指针打印链表中的节点
- 从指针打印动态int阵列中获取怪异的字符
- 通过尾指针打印节点的钥匙
- 如何使用箭头指针打印出一类数组对象,这些对象中有多个分数
- 如何存储变量的地址并使用指针打印值
- 如何用指针打印一系列字符
- 如何通过指针打印 2D 阵列?C++
- 使用指向列表的指针打印列表
- 如果根本不使用单个取消引用运算符,指向指针的指针打印什么值
- 使用指向字符的指针打印字符数组
- 如何在C++中从一组对象指针打印
- 当用另一个指针打印时,同一指针会给出不同的地址
- 如何使用指针的指针打印姓名列表?
- 用指针打印二进制搜索树C++的奇怪方法
- 通过指针打印矩阵
- 为什么即使在调试版本中,VS 和 Windbg 也会"this"指针打印为"0xcccccccc"?
- 使用for循环和指针打印浮点数组
- 无法使用指针打印 2D 矩阵的值