我在大约一两个星期前就开始学习编程了,我用动态内存分配做了一个简单的功能。它工作正常(我猜......没有崩溃)但我想知道是否还有其他方法可以返回到数组的开头,而不是将其地址保存到另一个变量。
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;
}
答案 0 :(得分:3)
不,没有办法拿指针并返回其“基地址”。你可以使用和伎俩略有不同的模式,但它们很少值得。
顺便说一下,在C ++中,*
是“名称的一部分”而不是声明中“类型的一部分”。这意味着int* tab, b
与int (*tab), b
类似,只有tab
是指针。这就是为什么当您将tab
分配给int
时,需要立即将b
投射到int* tab, * b
。您应该downloads/
或在不同的行上单独声明它们。
答案 1 :(得分:2)
此:
b = (int) tab;
是非法的。您正在int
中存储(以及稍后复活)指针。在某些计算机上(例如int
和int*
具有不同大小的计算机),它根本不起作用。你绝不应该在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;
}
以上几乎完全相同,但更简单,更安全。