C++ 使用指针交换而不引用数组C++;
所以我需要交换数组的第2行和第3行。我们的教授让我们使用一维数组,用指针代替二维数组。我们不能仅引用指针来引用数组。我不知道怎么做C++ 使用指针交换而不引用数组C++;,c++,arrays,pointers,C++,Arrays,Pointers,所以我需要交换数组的第2行和第3行。我们的教授让我们使用一维数组,用指针代替二维数组。我们不能仅引用指针来引用数组。我不知道怎么做 int numbers[25] = { 1,3,5,7,9 , -2,-4,-6, -8, -10 , 3,3,3,3,3 , 55, 77, 99, 22, 33, -15, -250, -350, -450, -550 }; 该阵列应如下所示: 1 3 5 7 9 -2 -4 -6 -8 -10
int numbers[25] = { 1,3,5,7,9 , -2,-4,-6, -8, -10 , 3,3,3,3,3 , 55, 77, 99, 22, 33, -15, -250, -350, -450, -550 };
该阵列应如下所示:
1 3 5 7 9
-2 -4 -6 -8 -10 // i need to swap this row
3 3 3 3 3 // for this row
55 77 99 22 33
-15 -250 -350 -450 -550
This is how i need to print it
1 3 5 7 9
3 3 3 3 3
-2 -4 -6 -8 -10
55 77 99 22 33
-15 -250 -350 -450 -550
注意:这不是我的整个硬件分配,而是我遇到的问题。只需定义一个临时数组:
int tmp_row[5];
保存第三行:
int bytes = sizeof(tmp_row);
memcpy(tmp_row, &numbers[10], bytes);
然后适当地填写第二行和第三行:
memcpy(&numbers[10], &numbers[5], bytes);
memcpy(&numbers[5], tmp_row, bytes);
为什么不试试这样的方法呢:
constexpr std::size_t rowLength = 5u;
const auto beginRow2 = std::begin(numbers) + (rowLength * 2);
const auto endRow2 = std::begin(numbers) + (rowLength * 3);
const auto beginRow3 = std::begin(numbers) + (rowLength * 3);
std::swap_ranges(beginRow2, endRow2, beginRow3);
这是习惯C++,可以很容易地适应一个通用函数,它接受一维容器、行长度和两行交换。
首先尝试使用指针算术打印所有元素。交换是什么意思?你知道如何引用“一维”数组作为“二维”数组吗?如果没有,那就从那里开始。当(或如果)您知道这一点时,您知道在“真实”2d数组中交换行吗?那你也要学。一旦你知道了这两件事,你应该能够结合这些知识。还要记住,对于任何指针或数组p
和索引i
,表达式p[i]
等于*(p+i)
。这意味着,即使您有一个指针,执行p[i]
也是有效的指针算法。。。。你确定你是在问C++而不是C吗?我认为最好使用STD::拷贝/Copysn而不是MeMcPy,这是C语言的遗留问题。问题是初学者的编程课程:他们鼓励正确使用C风格C++。C风格C++很少有明智的。@ Nefas看起来好像我用错了字。我想“他们热情地鼓励”会更准确。对不起,我理解你认为最好使用C风格C++。