桑海

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

今天做调整方阵这道题: 第一遍提交没有通过, 又gdb 重新温故了

交换二维数组中的两行数据:

void swap(int *a, int *b)                                                                                                                                                                      
{                                                                                                                                                                                              
    int t = *a;                                                                                                                                                                                
    *a = *b;                                                                                                                                                                                   
    *b = t;                                                                                                                                                                                    
}                                                                                                                                                                                              
 
//这里必须加上[10], 不加的话,本机测试是可以通过的,但是OJ提交会报这个错误, 编译不会通过 void swap_first(int (*a)[10], int (*b)[10], int n) { for (int i = 0; i < n; i++) swap( &(*a)[i], &(*b)[i] ); }

调用:
swap_first(a+0, a+1, n);

这里需要注意 二维数组中的第一位的数据类型:

#include <stdio.h>                                                                                                                                                                             
                                                                                                                                                                                               
int main(void)                                                                                                                                                                                 
{                                                                                                                                                                                              
    int a[10][10] = {{1, 2, 3, 4}, {5, 6, 7, 8}};                                                                                                                                              
    int b[10] = {0};                                                                                                                                                                           
    return 0;                                                                                                                                                                                  
} 

gdb --> start --> n ... > 
ptype(a) -- > int [10][10]
ptype(a+0) --> int (*)[10]
ptype( *(a+0)+1 ) --> int *
p *( *(a+0)+1 ) --> 2
ptype(b) ---> int [10]

注意二维数组中操纵其中第一维是的方法,int (*)[10]

是指向数组的指针, 和他的纬度10。

以及去它中元素地址的方式: & (*a)[i]

posted on 2016-12-15 14:44  桑海  阅读(340)  评论(0编辑  收藏  举报