【发布时间】:2015-04-08 17:46:18
【问题描述】:
给定数组的指针和数组的大小,反转数组相对容易。
但我的问题是:是否可以仅给定一个指向数组的指针来反转数组?
(在 C++ 中顺便说一句)
编辑
这显然是在洛克希德马丁公司的一次采访中提出的问题。见here
【问题讨论】:
-
不,因为答案显然取决于数组的结束位置。
标签: c++ arrays pointers reverse
给定数组的指针和数组的大小,反转数组相对容易。
但我的问题是:是否可以仅给定一个指向数组的指针来反转数组?
(在 C++ 中顺便说一句)
这显然是在洛克希德马丁公司的一次采访中提出的问题。见here
【问题讨论】:
标签: c++ arrays pointers reverse
一般来说,答案是否。 只有所谓的终止数组才有可能,例如以 NULL 终止的字符数组:
void reverse(char* str)
{
int end = -1;
int front = -1;
while (str[++end] != NULL);
while (--end > ++front)
{
char temp = str[end];
str[end] = str[front];
str[front] = temp;
}
}
【讨论】:
不,这是不可能的。如果您不知道数组的大小,则无法反转它。
【讨论】:
如果你为你的数组元素类型定义一个“终结符”,就像 \0 用于 char 数组一样,这是可能的。您应该始终以该值结束数组,否则您将获得运行时错误。但是使用大小或避免使用数组并使用向量总是更好,因为您使用的是 c++ 而不是 c。
【讨论】:
不。在不知道大小的情况下,您不能使用迭代器来反转它,如果不使用迭代器并且不知道大小,就不可能反转该特定数组。您必须声明另一个数组,将第一个数组中的内容复制到新数组中,然后对新数组执行内容反转。
【讨论】: