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

cfh9epnr  于 2022-12-26  发布在  其他
关注(0)|答案(2)|浏览(108)
    • 此问题在此处已有答案**:

In C how to get number of items in array of pointers to char strings(5个答案)
3年前关闭。

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

在这个例子中,我知道arch是由8个元素组成的,但是如果我不知道,我怎么知道呢?有办法吗?

ig9co6j1

ig9co6j11#

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

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结尾:因此,当指向字符串的指针(或衰减为指针的数组)传递给字符串处理函数时,仍然可以通过递增到空指针并保持计数来确定它们的长度。
如果只给出一个指向数组的指针,而没有下列项之一,则无法知道数组的长度:
1."长度"参数
1.指示数组结尾的标记值(如字符串的空终止符)

kkbh8khc

kkbh8khc2#

你不可能知道传递给函数的数组的大小。因为数组衰减到指向第一个元素的指针。
编译器将处理。

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

作为

void print(char **arch, int num)

所以当你这么做的时候

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

溶液:
1.你可以把数组的大小作为参数传递给函数.
1.在数组的末尾具有已知值,然后循环,直到找到期望的值。

相关问题