代码之家  ›  专栏  ›  技术社区  ›  hogar

修改pgm使用指针填充二维数组,但它不起作用

  •  1
  • hogar  · 技术社区  · 1 年前

    初始pgm

    void assign( int **mat, int n, int m ) {
    int **p = mat;
    int **p_end = p + n;
    for ( ; p < p_end; ++p ) {
      int *q = *p;
      int *q_end = q + m;
      for ( ; q < q_end; ++q ) {
         printf( "Give an integer: " );
         scanf( "%d", q );
      }
     }
    }
    

    改进的pgm

    void assign_V2( int **mat, int n, int m) {   
    int **p = mat;  
    for ( ; p < p + n; ++p )   
    {
     int *q = *p;  
     for ( ; q < q + m; ++q ) 
      {         
        printf( "Give an integer: " );         
        scanf( "%d", q );         
      }  
     }   
    }
    

    在for循环中引入p+n和q+m。 执行:它一直问我“给一个整数”。 解决增量问题? 谢谢

    1 回复  |  直到 1 年前
        1
  •  0
  •   Vlad from Moscow    1 年前

    这是循环

    for ( ; p < p + n; ++p ) 
    

    是不正确的,因为 p 总是小于 p + n (当然前提是 n 保持正数)在for循环中的值 n * sizeof( int * ) 或者严格地对代码进行拼写会调用未定义的行为。

    的值与第一个代码段中的第二个代码段相对 p_end 最初是固定的,不取决于的值

    wothin for循环。

    int **p_end = p + n;
    for ( ; p < p_end; ++p ) {