首页 文章

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

提问于
浏览
1

对于我正在处理的赋值,我需要使用函数来处理字符串数组中的数据 . 真的,一系列字符数组 . 我这样定义数组:

char strings[5][100];

所以在内存中大概有500个连续的字符 . 我定义的函数如下所示:

void foo(char *labels[100]);

我想我可能会遇到一些语法问题,但我认为这样做是在说,"I'm a function that expects a pointer to an array of 100 chars."所以 labels* 会指向第一个字符数组,而 (labels + 1)* 会指向第二个字符串,依此类推 . 我正在调用这样的函数:

foo(&strings[0]);

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

非常感谢任何帮助,或者如果你能够 pointer 我正确的方向 :)

2 回答

  • 4
    char strings[5][100]
    

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

    void foo(char *labels[100]);
    

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

    你要

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

    其中参数是指向正好100个字符的数组的指针 .

  • 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
            // ....
        }
    }
    

相关问题