void print(char *arch[], int num){
int i;
for(i=0; i<8; i++)
printf("%s\n", *(arch+i));
}
在这种情况下,我知道arch
由8个元素组成,但是如果我不知道怎么知道呢?有办法吗?
答案 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 :(得分:1)
您无法知道传递给函数的数组大小。 随着数组衰减到指向第一个元素的指针。
编译器会处理。
void print(char *arch[], int num)
为
void print(char **arch, int num)
因此,当您这样做
sizeof(arch); //It is size of pointer.
解决方案: