如何知道一个指针数组中有多少个元素?

时间:2019-01-30 19:40:02

标签: c

void print(char *arch[], int num){
    int i;
    for(i=0; i<8; i++)
        printf("%s\n", *(arch+i));
}

在这种情况下,我知道arch由8个元素组成,但是如果我不知道怎么知道呢?有办法吗?

2 个答案:

答案 0 :(得分:3)

由于数组在作为参数传递给函数时会衰减指向其第一个元素的指针,因此长度信息也会丢失。

例如:

void bar()
{
    int data[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    printf("%zu\n", sizeof data); // output: 10 * sizeof(int)
    foo(data);
}

void foo(int *arg)
{
    printf("%zu\n", sizeof arg) // output: sizeof(int *)
}

这就是为什么字符串在C:中以null终止的原因,因此,当将指向字符串的指针(或衰减到指针的数组)传递给字符串处理函数时,仍然可以通过增加null指针并保持其长度来确定其长度计数。

在没有以下任何一项的情况下,仅给出指向数组的指针,就无法知道数组的长度:

  1. “长度”参数
  2. 指示数组结尾的哨兵值(a-la为空终止符)

答案 1 :(得分:1)

您无法知道传递给函数的数组大小。 随着数组衰减到指向第一个元素的指针。

编译器会处理。

void print(char *arch[], int num)

void print(char **arch, int num)

因此,当您这样做

   sizeof(arch); //It is size of pointer.

解决方案:

  1. 您可以传递额外的数组大小以用作参数。
  2. 在数组末尾知道值并循环,直到找到期望值为止。