要想把一个二维数组值全部替换成另一个二维数组的值,前提条件为二者的规模是相同的。即行数和列数分别相同。
创新互联建站是专业的青岛网站建设公司,青岛接单;提供成都做网站、成都网站建设、成都外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行青岛网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
假定均为M行N列,类型为int,即
int a[M][N], b[M][N];
要将a中所有值替换成b的值,有以下两种方法。
1 逐一元素赋值。
使用双重循环,对数组元素遍历并赋值。
代码如下:
int i, j;
for(i = 0; i M; i ++)
for(j = 0; j N; j ++)
a[i][j] = b[i][j];//逐元素赋值。
2 整体复制内存。
由于二者结构相同,可以使用C库函数memcpy来实现更高效的数据复制。
void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
调用该函数需要引用string.h头文件。
代码如下:
memcpy(b, a, sizeof(a));
只需要这样一句就可以完成复制操作了。
可以让数组进行转置来实现,参考如下:
public class TestTransposition {
int col;
int row;
/**转换方法 将一个数组进行转置
* 原理很简单
*
* @param input
* @return
*/
public int[][] trans(int[][] input) {
int[][] output = null;
row = input.length;
if (row $amp;amp;$nbsp;0) {
col = input[0].length;
}
output = new int[col][row];
for (int i = 0; i $amp; for (int j = 0; j $amp; output[j][i] = input[i][j];
}
}
return output;
}
public static void main(String[] args){
//若是需要得到转置数组,应该调用上面的转置方法
// int[][] in={{1,2,3},{3,4,5}};
// int[][] out=new TestTransposition().trans(in);
// for (int i = 0; i $amp; // for (int j = 0; j $amp; // System.out.print(out[i][j]);
// }
// System.out.println("");
// }
//若只是想输出得到效果 这应该是可以的
int[][] in={{1,2,3},{3,4,5}};
for(int i=0;iin[0].length;i++){
for(int j=0;jin.length;j++){
System.out.print(in[j][i]);
}
System.out.println("");
}
}
/*a[2][3]----a[3][2]
* a[0][0]----a[0][0]
* a[0][1]----a[1][0]
* a[0][2]-----a[2][0]
* a[1][0]----a[0][1]
* a[1][1]----a[1][1]
* a[1][2]-----a[2][1]
*/
//故此 初步想法应是通过反向循环,即先循环列,在循环行来实现。
}
#include stdio.h
//字符的复制作了小小的修改
void my_strcpy(char *s1,char *s2){
int i;
for(i=0;s2[i]!='\0';i++){
s1[i]=s2[i];
}
s1[i]='\0';
}
void array_swap(char b[][7],int x,int y){
char s[8];
my_strcpy(s,b[y]);
my_strcpy(b[y],b[x]);
my_strcpy(b[x],s);
}
int main(){
char b[][7]={"foo","bar","foobar"};
int i;
array_swap(b,0,2);
for(i=0;i3;i++)
printf("%s\n",b[i]);
}