c - 如何交换使用指向数组的指针定义的二维数组中的行?
问题描述
我想交换定义如下的二维数组的两行。
double (*mat)[N];
mat = (double(*)[N])malloc(m*sizeof(double [N]));
...
swap(mat, mat+1);
但我swap(mat, mat+1);
只交换每行中的第一个元素。
void swap(double **a,double **b){
double *temp;
temp = *a;
*a = *b;
*b = temp;
}
如果我使用一个double **mat;
用动态分配的行和行定义的二维数组,则相同的交换工作。
解决方案
void swap(double **a,double **b)
它之所以有效,是因为在这种情况下,您交换了指针。但是当你声明:
double (*mat)[N];
它是一个指向数组的指针。这就是为什么它只是交换每行的第一个值的原因。
如果要交换两个数组,只需使用指针(不要使用双指针):
void swap( double *m1, double *m2, size_t n )
{
for ( size_t i = 0; i < n; i++ )
{
double tmp = m1[i];
m1[i] = m2[i];
m2[i] = tmp;
}
}
然后当你想交换两行时:
swap(mat[0], mat[1], N);
推荐阅读
- r - ggplot2:在灵活的绘图功能中使用 aes() 内部和外部的颜色/形状/...
- reactjs - React + Next.js 将文件从服务器下载到客户端
- sql - 您能否成功地将多个条件嵌套在 partition by 语句中?
- node.js - 尝试使用 mongoose 中的 create 保存多条记录时出现 400 错误请求
- r - R有效地绘制了数千个在椭圆体中变形的具有透明度的3D球体
- python - 如何使用 for 循环询问用户名并显示三次?
- python - 从文件中删除 SQL 注释
- swift - (Swift)将图像上传到后端不起作用并在(邮递员)和(管理页面)中工作
- google-cloud-platform - 在单独的项目中访问 Cloud SQL 实例
- amazon-web-services - Beanstalk中的AWS websocket通过API网关