带字符串的动态内存分配

时间:2016-02-01 02:07:40

标签: c++

我的教授目前正在教授动态内存分配主题以及指针。我不太了解以下示例:

#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]”如何打印出名称。不应该“name [i]”打印出指针吗?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

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*作为参数类型的非成员函数被赋予更高的优先级。