1

次のように宣言された特定の関数を使用する必要があります。

void someFunc (char** characters, int from, int to);

問題は、マトリックスを渡す方法が見つからないことです。たとえば、次のようになります。

char matrix[4][4] = { { 'a', 'e' , 'i', 'm'}, 
                      { 'b', 'f' , 'j', 'n'},  
                      { 'c', 'g' , 'k', 'p'},  
                      { 'd', 'h' , 'l', 's'} };
    someFunc(matrix, 2, 3);   //doesnt work
    someFunc(&matrix, 2, 3);  //doesnt work

コンパイラは文句を言いますが、someFunc の署名を変更することはできません。では、char 行列を関数に渡すにはどうすればよいでしょうか?

4

5 に答える 5

2

自動行列を使用する代わりに、ポインターへのポインターを malloc するだけで、コードは次のようになります

main(void)
{
    int i;
    char **ptr = NULL;
    ptr = (char**)malloc(sizeof(char) * 4);
    for(i = 0 ; i < 4 ; i++)
         ptr[i] = (char*)malloc(sizeof(char) * 4);

    //initialize your matrix here 
    someFunc(ptr , 2 , 3); 
}

または、関数プロトタイプを (ほんの少しだけ) 変更する準備ができている場合は、代わりにこれを使用しvoid sumFunc(char matrix[][4) , int from , int to)てください。他のものを変更する必要はありません。

于 2013-08-30T16:22:54.497 に答える
1

char ** 変数の例は次のとおりです。

char  *array[]={"this","is","char","pointer"};

次のように使用します。

someFunc(array, 2, 3);

前の配列の例は次のようになります。

char *array[][5] = { 
{"this","is","char","element","one"},  
{"this","is","char","element","two"},  
{"this","is","char","element","three"}};  

しかし、それはプロトタイプが必要とするものではありません。前の例を使用して、それがあなたに適していることを確認してください。

[編集]あなたの質問と私のコメントごとに、配列の内容にアクセスする方法は次のとおりです。(ランダムで、必要な任意の形式で印刷できます)。

    #include <windows.h>
#include <ansi_c.h>

int main(void)
{
    char *array[]={"this","is","char","pointer"};
    int i,j;

    //print in columns
    printf("Columns:\n");
    for(i=0;i<7; i++)
    {

        for(j=0;j<4;j++)
        {
            if(i> strlen(array[j])) 
                printf(" ");
                else
                printf("%c", array[j][i]);  
        }
        printf("\n");
    }
    //print in rows (easier)
    printf("\n\nRows:\n");
    for(i=0;i<4;i++)
    {
        printf("%s\n", array[i]);   
    }
    getchar();
    return 0;   
}
于 2013-08-30T15:44:39.883 に答える