【问题标题】:Error output from the table表的错误输出
【发布时间】:2012-02-19 11:47:31
【问题描述】:

请运行这段代码,并解释为什么输出是这样的:

table[0]=3
table[1]=-858993567
table[2]=4
#include "stdafx.h"
struct First
{
    long data;
};

struct Second : public First
{
    char marker;
};

void printTable(First *table, int length)
{
    for (int i=0; i < length; ++i)
    {
        printf("table[%d]=%ld\n", i, table[i].data);
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    Second myTable[3];
    myTable[0].marker='a';
    myTable[1].marker='b';
    myTable[2].marker='c';

    myTable[0].data=3;
    myTable[1].data=4;
    myTable[2].data=5;

    printTable(myTable, 3);
    return 0;
}

谁能帮帮我?

【问题讨论】:

    标签: c++ arrays class pointers


    【解决方案1】:

    该函数需要一个 First 数组,但您传递一个 Second 数组。那是行不通的。

    您可以使用指向基类的指针来传递单个派生对象,但不能传递数组。索引运算符[] 需要知道对象的确切类型才能计算它们的位置。

    【讨论】:

    • 所以对于类数组,我不能将其转换为基类?
      因为当我传递 Second s;
      的单个对象时,比如 printTable(&s, 1);
      那么一切都好;
    • 对。您实际上是在传递一个指向数组第一个对象的指针。为了找到下一个对象,函数需要知道每个对象的确切类型(以及大小)。否则找不到数组的第二个和第三个对象。
    猜你喜欢
    • 1970-01-01
    • 2014-11-03
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多