如何修改传递给函数的2d数组

时间:2017-02-18 19:47:44

标签: c arrays string 2d

我知道我们可以通过像这样的函数来改变字符串

void    c(char *s)                                                                             
{                                                                                              
  int   i = 0;                                                                                 

  while (s[i])                                                                                 
    s[i++] = 's';                                                                              
}                



int     main()                                                                                 

    {                                                                                              
      char str[] = "hello";                                                                        

      c(str);                                                                                      
      printf("%s\n", str);                                                                         
      return (0);                                                                                  
    }  

在这种情况下,它将打印“sssss”。

但是我怎么能像修改字符串一样修改二维数组呢? 我的意思是不返回数组。

void    c(char **s)                                                                          
{                                                                                            
  int   i = 0;                                                                               
  int   j = 0;                                                                               

  while (s[i])                                                                               
    {                                                                                        
      j = 0;                                                                                 
      while (s[i][j])                                                                        
        {                                                                                    
          s[i][j++] = 's';                                                                   
        }                                                                                    
      i++;                                                                                   
    }                                                                                        

}                                                                                            

int     main()                                                                               
{                                                                                            
  char tab[2][2];                                                                            
  tab[0][0] = 'a';                                                                           
  tab[0][1] = 'b';                                                                           
  tab[1][0] = 'c';                                                                           
  tab[1][1] = 'd';                                                                           
  c(tab);                                                                                    
  printf("%c%c\n%c%c", tab[0][0], tab[0][1], tab[1][0], tab[1][1]);                          
  return (0);                                                                                
}  

以下是我们如何做到这一点的想法。

我希望我已经足够清楚了吗?

2 个答案:

答案 0 :(得分:0)

当然,它一样。任何尺寸计数。

void c(char **s, int stringCount)
{
    int   i = 0, j = 0;

    for (j = 0; j < stringCount; ++j)
    {
        i = 0;
        while (s[j][i])
        {
            s[j][i++] = 's';
        }
    }
}

int     main()
{
    char *tab[2] = { "str1", "str2" };
    c(tab, 2);
    printf("%c%c\n%c%c", tab[0][0], tab[0][1], tab[1][0], tab[1][1]);
    printf("%s\n%s", tab[0], tab[1]);
    getchar();
    return (0);
}

答案 1 :(得分:0)

定义应包含长度。以下将是一个很好的阅读: http://www.firmcodes.com/pass-2d-array-parameter-c-2/

  

void c(char(* s)[length])

#include <stdio.h>
void    c(int len, char (*s)[len])
{
  int   i = 0;
  int   j = 0;

  while (i < len)
    {
      j = 0;
      while (s[i][j])
        {
          s[i][j++] = 's';
        }
      i++;
    }

}

int     main()
{
  char tab[2][2];
  tab[0][0] = 'a';
  tab[0][1] = 'b';
  tab[1][0] = 'c';
  tab[1][1] = 'd';
  c(2, tab);
  printf("%c%c\n%c%c", tab[0][0], tab[0][1], tab[1][0], tab[1][1]);
  return (0);
}