2017-02-18 27 views
0

Я знаю, что мы можем изменить строковые благодаря функции как этотКак изменить 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».

Но как я могу изменить массив 2d так же, как и для строки? Я имею в виду без возврата массива.

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);                     
} 

Вот идея, как мы могли это сделать.

Надеюсь, я был достаточно ясен?

ответ

0

Определение должно содержать длину. После будет хорошо читать: http://www.firmcodes.com/pass-2d-array-parameter-c-2/

недействительным с (символ (* s) [длина])

#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); 
} 
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); 
} 
+0

Как вызвать функцию? Я пробовал func (s), но он не работает :( – Beben

+0

Спасибо, что ответили :) – Beben

 Смежные вопросы

  • Нет связанных вопросов^_^