我必须使用这样声明的给定函数:
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矩阵传递给函数?
答案 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);
}