在c语言二维数组里能否只交换第一行和第二行的首地址(记住哦,只交
换首地址)即&a[0][0]和&a[1][0],来实现把第二行和第一行的元素互换若原来是{1234}{5678}互换后{5678}{1234}...
换首地址)即&a[0][0]和&a[1][0],来实现把第二行和第一行的元素互换
若原来是{1 2 3 4}{5 6 7 8}互换后{5 6 7 8}{1 2 3 4} 展开
若原来是{1 2 3 4}{5 6 7 8}互换后{5 6 7 8}{1 2 3 4} 展开
展开全部
可以整一个临时的数组交换就行了。一维数组就相当于一个指针,二维数组就相当于指针的指针。
即int a[10],a其实就是一个int *。int b[10][10],b就是一个int **,而b[0]就是一个int *。
比如你的数组a[0] = {1 2 5 7} a[1] = {5 3 8 0} a[2] = {2 4 7 9},其实就是一个指针。如果这个整明白了,就好操作了。
int i,j;
int a[3][4] ={ 1,2,5,7, 5, 3, 8, 0, 2, 4, 7, 9};
int b[4]; /* 临时保存交换的数据 */
for(i = 0; i < 3; i ++)
{
for(j = i; j < 2; j ++)
{
/* 冒泡排序,把最小的放到最后 */
if (a[j][0] < a [j + 1][0])
{
memcpy(b,a[j], sizeof(b));
memcpy(a[j], a[j + 1], sizeof(b));
memcpy(a[j + 1], b, sizeof(b));
}
}
}
追问
互换第一行第一个和第一行最后的元素,却通过交换它们两个的地址能不能实现如:
2000 2004 2008 2012变成2012 2004 2008 2000然后再输出这个数组,结果是怎样的…自己试过,编译通不过
追答
数组是物理和逻辑连续的数据结构
物理2000 2004 2008 2012
逻辑a0 a1 a2 a3
你改变了物理结构是不行的,我们知道a是指针,代表数组的第一个位置2000,进而可以通过2000+4*i得到所有的地址,交换了之后,改变了,a0=2012,那么a1=2016显然是不对的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询