是否仍然可以通过指针解决数组的各个元素?

时间:2011-12-05 22:34:39

标签: c arrays function pointers

我正在尝试编写一个将多个两个数字的程序,但是以二进制形式输出结果,显示计算(即移动行)。我将二进制数存储为32个字符的数组,每个元素都是1或0。

我有一个将十进制转换为二进制字符数组的函数,但是我的数组只存在于函数中,但我需要在另一个函数中使用该数组,也需要在main中使用。我原以为可以使用指针在我的转换器函数中更改main中数组的值,这样数组就会存在于main中,可以用在其他函数中。这可能吗?

我已经声明了两个指向字符数组的指针:

char (*binOne)[32];
char (*binTwo)[32];

如果我将指针作为参数传递给函数,我还可以访问每个元素吗?对不起,如果我在这里没有多大意义。

3 个答案:

答案 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;

}