gpt4 book ai didi

c - 函数初始化的双指针数组

转载 作者:行者123 更新时间:2023-11-30 19:03:07 26 4
gpt4 key购买 nike

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

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,只是为了使其在我的电脑(Codeblocks)上工作。

我想做的是定义一个二维数组并将其作为第一个参数(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];

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

非常感谢,

最佳答案

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;
}

关于c - 函数初始化的双指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com