将指向数组的字符数组的指针传递给函数?

时间:2011-03-11 23:36:12

标签: c

对于我正在进行的赋值,我需要使用函数来操作字符串数组中的数据。真的,一系列字符数组。我这样定义数组:

char strings[5][100];

因此在内存中可能有500个连续的字符。我定义的函数如下所示:

void foo(char *labels[100]);

我想我可能会遇到一些语法问题,但我认为这样做是在说“我是一个需要指向100个字符数组的指针的函数。”所以labels*指向第一个字符数组,(labels + 1)*指向第二个字符串,依此类推。我正在调用这样的函数:

foo(&strings[0]);

我认为这样做是抓取strings中第一个字符数组的地址。我收到的错误消息告诉我函数需要char **,但参数是char (*)[100]。这让我很困惑,因为我没有指定指向char的指针。

非常感谢您提供任何帮助,或者如果您pointer我朝着正确的方向前进:)

2 个答案:

答案 0 :(得分:4)

strings是一个二维数组。因此,当传递给函数时,它会衰减到char(*)[100]。相反,你可以像 -

那样拥有原型
void foo(char labels[][100], int row); // `row` decides which param to access.

void foo(char labels[][100], int row)
{
    for(int i = 0; i < 100; ++i) // If you need, modify all the 100 row elements
    {
        labels[row][i] = 'a'; // Modifying like this
        // ....
    }
}

答案 1 :(得分:4)

char strings[5][100]

strings声明为包含5个元素的数组。每个元素都是100个字符的数组。

void foo(char *labels[100]);

foo声明为返回void并接受指针数组的函数。 ( 100只是装饰:把它留空或放42或10000是完全相同的事情)

你想要

void foo(char (*labels)[100]);

其中参数是指向恰好100个字符的数组的指针。