将char矩阵传递给C函数

时间:2013-08-30 15:29:24

标签: c visual-c++ matrix

我必须使用这样声明的给定函数:

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 个答案:

答案 0 :(得分:2)

AS @IgorTandetnik说

像这样定义

char* data[]= {matrix[0], matrix[1], matrix[2], matrix[3]};
someFunc(data, 2, 3);   // works fine

使用矩阵的每一行初始化的字符指针数组,然后将其作为参数传递

测试代码:

   #include<stdio.h>
   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'} };
   main()
   {


  char* data[]= {matrix[0], matrix[1], matrix[2], matrix[3]};
  someFunc(data, 2, 3);   
   }

    void someFunc (char** c , int from, int to)
   {

  int i=0,j=0;

  for(i=0;i<4;i++) 
  for(j=0;j<4;j++)
  printf("%c\n",c[i][j]); //printf("%c",*(c[i]+j));

  }

答案 1 :(得分: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),而不必更改任何其他内容

答案 2 :(得分: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;   
}

答案 3 :(得分:1)

以下代码可以使用。但是您可能需要使用一个索引而不是函数中的两个索引来访问数组。声明双索引数组时,数据不会存储为“指针指针”。所以你不能使用 char ** foo1 传递 char foo0 [] []

void someFunc (char* characters)
{
    char c = character[0]; // c = 'a'
    c = character[4]       // c = 'b'
    c = character[8]       // c = 'c'
    c = character[12]      // c = 'd'
}


void main(void)
{
    char matrix[4][4] = { 
    { 'a', 'e' , 'i', 'm'}, 
    { 'b', 'f' , 'j', 'n'},  
    { 'c', 'g' , 'k', 'p'},  
    { 'd', 'h' , 'l', 's'} };

    someFunc((char*)matrix);
}