Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用指针交换而不引用数组C++;_C++_Arrays_Pointers - Fatal编程技术网

C++ 使用指针交换而不引用数组C++;

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

所以我需要交换数组的第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   // 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++。