我正在尝试编写一个将多个两个数字的程序,但是以二进制形式输出结果,显示计算(即移动行)。我将二进制数存储为32个字符的数组,每个元素都是1或0。
我有一个将十进制转换为二进制字符数组的函数,但是我的数组只存在于函数中,但我需要在另一个函数中使用该数组,也需要在main中使用。我原以为可以使用指针在我的转换器函数中更改main中数组的值,这样数组就会存在于main中,可以用在其他函数中。这可能吗?
我已经声明了两个指向字符数组的指针:
char (*binOne)[32];
char (*binTwo)[32];
如果我将指针作为参数传递给函数,我还可以访问每个元素吗?对不起,如果我在这里没有多大意义。
答案 0 :(得分:2)
在C中,大多数时间数组的行为类似于指向其第一个元素的指针,因此您可能想要做的是:
void foo(char* arr){
//some stuff, for example change 21-th element of array to be x
arr[20] = 'x';
}
int main(){
char binOne[32];
char binTwo[32];
// change array binOne
binOne[20] = 'a';
foo(binOne);
// now binOne[20] = 'x'
foo(binTwo);
// now binTwo[20] = 'x'
}
答案 1 :(得分:1)
我作为评论添加的内容的继续:
在C中,如果要修改/返回数组,可以通过将指针作为参数传递给它来实现。例如:
int toBinary(char *buff, int num) { /* convert the int, return 1 on success */ }
...
char buff[32];
toBinary(buff, 9001);
在C中,数组的名称是它的地址,它是第一个元素的地址:
buff == &buff == &buff[0]
答案 2 :(得分:0)
是的,这是可能的。但是你只需要一个指向数组的指针而不是一个指针数组。 你需要原型 例如
void int_to_arr(int n, char *arr);
void arr_to_int(int *n, char *arr);
in main(){
char *binarr = calloc(32, sizeof(char));
int n = 42;
int_to_arr(n, binarr);
}
void int_to_arr(int n, char *arr)
{
//do you conversion
//access array with
// arr[i]
}
void arr_to_int(int *n, char *arr)
{
//do you conversion
//access array with
// *n = result;
}