此C++代码中以何种方式调用函数
In what manner are the functions called in this C++ code?
我从 c++ 入门书中获得了这段代码,该书旨在解释删除运算符。但是,我不明白的是程序如何调用这两个函数以及它们如何交互。
// delete.cpp -- using the delete operator
#include <iostream>
#include <cstring> // or string.h
using namespace std;
char * getname(void); // function prototype
int main()
{
char * name; // create pointer but no storage
name = getname(); // assign address of string to name
cout << name << " at " << (int *) name << "n";
delete [] name; // memory freed
name = getname(); // reuse freed memory
cout << name << " at " << (int *) name << "n";
delete [] name; // memory freed again
return 0;
}
char * getname() // return pointer to new string
{
char temp[80]; // temporary storage
cout << "Enter last name: ";
cin >> temp;
char * pn = new char[strlen(temp) + 1];
strcpy(pn, temp); // copy string into smaller space
return pn; // temp lost when function ends
}
本书提供了以下示例运行:
Enter last name: Fredeldumpkin
Fredeldumpkin at 0x004326b8
Enter last name: Pook
Pook at 0x004301c8
我不明白的是"输入姓氏:"是如何以及为什么被执行两次,为什么在 int main() 之前执行 char * getname() 函数,以及这两个函数如何相互作用。
"
输入姓氏"被打印了两次,因为它被打印在getname()
中,getname()
被调用了两次。
getname()
在int main()
之前没有被执行,它被声明。必须声明它,以便当编译器编译main()
(使用getname()
)时,编译器知道要做什么。
main()
是第一段可执行代码(开发人员通常对其有影响,但也有例外)。程序中发生的一切都是因为main()
这样做,或者main()
调用的东西(直接或间接)这样做。在您的示例中,main()
将
- 调用 getname()
- 根据 getname() 的返回打印一些东西
- 释放在 getname() 中分配的资源
- 调用 getname()
- 根据 getname() 的返回打印一些东西
- 释放在 getname() 中分配的资源
相关文章:
- 重载方法的方式会在使用临时调用时生成编译器错误
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 是否有一种非间接、非黑客的方式来保证 constexpr 函数仅在编译时可调用?
- 如何根据其ARITY(或编译时已知的其他信息)以不同的方式调用函数对象
- 是否可以在main中以类似于Boost.MinimalTestFacility的方式调用Boost.UnitTest测试
- 通过以下方式调用函数有什么区别
- 此C++代码中以何种方式调用函数
- Opencv 函数只能以 C 代码方式调用,而不能以C++方式调用
- 如何在以下程序中以私有方式调用派生类析构函数
- 以错误的方式调用子类中的函数的最佳方法是什么
- 使用提升预处理器以迭代方式调用可变参数模板
- 以最紧凑的方式调用默认(AKA无参数)构造函数
- 如何以编程方式调用Windows 7中的Ctrl+Alt+Del窗口
- 拥有 HMENU,如何枚举菜单项并以编程方式调用菜单项
- 为什么在动态数组上以特定方式调用'delete'不起作用?
- 以编程方式调用"Save to PDF..."表
- 以编程方式调用正确的函数参数
- 以非多态方式调用虚拟函数的成本是多少
- 以Python方式调用Lua函数,即命名参数