返回指向数组开头的指针

时间:2016-05-07 13:42:48

标签: c++ arrays pointers

我在大约一两个星期前就开始学习编程了,我用动态内存分配做了一个简单的功能。它工作正常(我猜......没有崩溃)但我想知道是否还有其他方法可以返回到数组的开头,而不是将其地址保存到另一个变量。

void time()
{
    int* tab, b;
    int q, i;
    clock_t start, stop; //time.h cstdlib
    double time;


    cout << "Number of elements in array: ";
    cin >> q;
    tab = new int[q];
    b = (int) tab;
    start = clock();
    for (i = 0; i < q; i++)
    {
        tab[i] = i;
        tab[i] += 50;
    }
    stop = clock();
    czas = (double)(stop - start)/CLOCKS_PER_SEC;
    cout << "Time: "<< time << endl;
    tab = (int*) b; 
    delete [] tab;
}

2 个答案:

答案 0 :(得分:3)

不,没有办法拿指针并返回其“基地址”。你可以使用和伎俩略有不同的模式,但它们很少值得。

顺便说一下,在C ++中,*是“名称的一部分”而不是声明中“类型的一部分”。这意味着int* tab, bint (*tab), b类似,只有tab是指针。这就是为什么当您将tab分配给int时,需要立即将b投射到int* tab, * b。您应该downloads/或在不同的行上单独声明它们。

答案 1 :(得分:2)

此:

b = (int) tab;

是非法的。您正在int中存储(以及稍后复活)指针。在某些计算机上(例如intint*具有不同大小的计算机),它根本不起作用。你绝不应该在C ++中使用C风格的(foo)bar强制转换。您只需将指针存储在另一个int*指针中即可。但是在您的示例程序中,您根本不需要存储它,因为您永远不会更改原始指针内的地址。

如果我要重写您的代码,我会这样做:

void time()
{
    int q;
    cout << "Number of elements in array: ";
    cin >> q;

    vector<int> tab(q);
    clock_t start = clock();
    for (int i = 0; i < q; i++)
    {
        tab[i] = i;
        tab[i] += 50;
    }
    clock_t stop = clock();
    double time = double(stop - start)/CLOCKS_PER_SEC;
    cout << "Time: "<< time << endl;
}

以上几乎完全相同,但更简单,更安全。