gpt4 book ai didi

c++ - 带字符串的动态内存分配

转载 作者:搜寻专家 更新时间:2023-10-31 00:31:01 24 4
gpt4 key购买 nike

我的教授目前正在教授动态内存分配主题以及指针。我不太明白下面的例子:

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;

int main(void)
{
int i;
char * names[7]; // declare array of pointers to char
char temp[16];

// read in 7 names and dynamically allocate storage for each
for (i = 0; i < 7; i++)
{
cout << "Enter a name => ";
cin >> temp;
names[i] = new char[strlen(temp) + 1];

// copy the name to the newly allocated address
strcpy(names[i],temp);
}

// print out the names
for (i = 0; i < 7; i ++) cout << names[i] << endl;

// return the allocated memory for each name
for (i = 0; i < 7; i++) delete [] names[i];

return 0;
}

对于打印名字的那一行,我不明白“names[i]”是如何打印名字的。 “names[i]”不应该打印出指针吗?非常感谢对此的任何帮助。

最佳答案

operator<< 过载具有以下签名。

std::ostream& operator<<(std::ostream&, char const*);

它打印空终止字符串。

当你使用

cout << names[i] << endl;

使用了重载。

您可以在 http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2 查看所有非成员重载.

有一个成员函数重载std::ostream签名:

std::ostream& operator<<( const void* value );

但是,在重载决策逻辑中,带有char const*的非成员函数因为参数类型被赋予更高的优先级。

关于c++ - 带字符串的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35122039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com