双指针数组以进行函数初始化

时间:2019-02-09 23:10:22

标签: c arrays function pointers double

我正在尝试测试以下功能:

uint32_t atoi_len(uint8_t **buf, uint8_t len) {
    uint32_t value = 0;

do {
    if ((**buf < '0') || (**buf > '9')) return 0; 
    value *= 10;
    value += *((*buf)++) - '0';
} while (--len);

return value;
}

我已经将uint32_t和uint8_t重新定义为int和char,只是为了使其在我的PC上工作(代码块)。

我想做的是定义一个二维数组,并将其作为第一个参数(uint8_t **)传递给此函数,但是没有任何效果。

uint8_t buffer[10][10] = {"test", "test2", "stuff", "something"};

但我不能打电话:

atoi(buffer, len); 

甚至没有:

atoi_len(&buffer[0][0], len);
atoi_len(&buffer[0], len);

如何通过指针初始化和访问?如何将指针传递给函数?

如何构建二维数组,并将该数组的指针传递给函数?我可以轻松地在一维中做到这一点:

char array[30] = "testof the test";
char* str = array; //or char* str = &array[0];

我想拥有一个简单的方法来创建多维数组并为其分配一个指针,这样我就可以按指针访问数组,甚至可以将此指针传递给函数。

非常感谢你, S

2 个答案:

答案 0 :(得分:1)

char array[][10]可以作为char (*buf)[10]传递给函数。
将二维数组传递给仅处理第一个元素的函数似乎没有多大意义,因此需要使用参数来指示要处理的元素。

#include <stdio.h>
#include <inttypes.h>

uint32_t atoi_len( char (*buf)[10], size_t each) {
    uint32_t value = 0;
    size_t len = 0;

    printf ( "buf[%zu] is %-12s", each, buf[each]);

    while ( buf[each][len]) {//not the zero terminator
        if ((buf[each][len] < '0') || (buf[each][len] > '9')) {
            return 0;
        }
        value *= 10;
        value += buf[each][len] - '0';
        len++;
    }

    return value;
}

int main( void) {
    char array[][10] = { "33", "-43,6,1", "8", "98", "12.3"};

    printf ( "result is %"PRIu32"\n", atoi_len ( array, 0));
    printf ( "result is %"PRIu32"\n", atoi_len ( array, 1));//has - and ,
    printf ( "result is %"PRIu32"\n", atoi_len ( array, 2));
    printf ( "result is %"PRIu32"\n", atoi_len ( array, 3));
    printf ( "result is %"PRIu32"\n", atoi_len ( array, 4));//has .
    return 0;
}

答案 1 :(得分:0)

目前,我已使用以下代码解决了问题:

声明指向数组的指针

char *array[] = {"-43,6,-45,1","8","98"};

通过以下两种方式之一将其传递给函数

atoi_len(array, len);
atoi_len(&(*array), len);

我现在开始难以理解,我使用Debug and Watch(CodeBlocks)跟踪每个变量的内存地址。

最后一步是要知道是否有简单/优雅的方法来做到这一点。 无法使用malloc,因为在嵌入式硬件上,我不允许:)。

谢谢大家。