Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何找到数组的大小? 如何通过只接收指向数组指针的函数来查找数组的大小?_C_Arrays_Pointers - Fatal编程技术网

C 如何找到数组的大小? 如何通过只接收指向数组指针的函数来查找数组的大小?

C 如何找到数组的大小? 如何通过只接收指向数组指针的函数来查找数组的大小?,c,arrays,pointers,C,Arrays,Pointers,除非传递数组的大小,否则无法执行此操作。如果在您的情况下,-1是标记列表末尾的哨兵,您可以使用此选项: #include <stdio.h> int find(int *p) { int * q = p; while(*q != -1) ++q; return q-p; } int main() { int a[]={12,2,9,6,5,11,-1}; printf("%d", find(a)); re

除非传递数组的大小,否则无法执行此操作。如果在您的情况下,-1是标记列表末尾的哨兵,您可以使用此选项:

#include <stdio.h>

int find(int *p)
{  
    int * q = p;
    while(*q != -1)
        ++q;
    return q-p;  
}

int main()
{

    int a[]={12,2,9,6,5,11,-1};
    printf("%d", find(a));

    return  0;
}
#包括
int find(int*p)
{  
int*q=p;
而(*q!=-1)
++q;
返回q-p;
}
int main()
{
int a[]={12,2,9,6,5,11,-1};
printf(“%d”,查找(a));
返回0;
}

除非传递数组的大小,否则无法执行此操作。如果在您的情况下,-1是标记列表末尾的哨兵,您可以使用此选项:

#include <stdio.h>

int find(int *p)
{  
    int * q = p;
    while(*q != -1)
        ++q;
    return q-p;  
}

int main()
{

    int a[]={12,2,9,6,5,11,-1};
    printf("%d", find(a));

    return  0;
}
#包括
int find(int*p)
{  
int*q=p;
而(*q!=-1)
++q;
返回q-p;
}
int main()
{
int a[]={12,2,9,6,5,11,-1};
printf(“%d”,查找(a));
返回0;
}

如果只是将一个没有大小信息的指针传递给
find
,则必须使用类似
C
char*
字符串的习惯用法,并具有特殊的数据结尾值
C
的字符串习惯用法使用
null
字符(
\0
)标记数据的结束
C
的标准字符串长度函数(
strlen
)在字符串大小的计数中也不包括此
null
字符。看起来上面的代码可能正在使用
-1
标记数据的结束。如果您从未对数据使用负值,这将起作用。如果是这种情况,则可以按如下方式计算数组的大小:

size_t length_of_array(int *p) {
    size_t len = 0;
    while( *(p + len) > 0 )
        ++len;
    return len;
}

如果您只是将一个没有大小信息的指针传递给
find
,那么您必须使用类似
C
char*
字符串的习惯用法,并具有特殊的数据值结尾
C
的字符串习惯用法使用
null
字符(
\0
)标记数据的结束
C
的标准字符串长度函数(
strlen
)在字符串大小的计数中也不包括此
null
字符。看起来上面的代码可能正在使用
-1
标记数据的结束。如果您从未对数据使用负值,这将起作用。如果是这种情况,则可以按如下方式计算数组的大小:

size_t length_of_array(int *p) {
    size_t len = 0;
    while( *(p + len) > 0 )
        ++len;
    return len;
}

来吧!如果您的问题包含代码,请始终至少添加语言或库标记。您没有“指向数组的指针”。指向数组的指针类似于
int(*p)[7]
。你有一个指向int.wl的指针,来吧!如果您的问题包含代码,请始终至少添加语言或库标记。您没有“指向数组的指针”。指向数组的指针类似于
int(*p)[7]
。你有一个指向int的指针。我没有使用-1作为结束,如果我不知道最后一个字符,如何继续??你不能。您传递的是一个指针,而不是数组,如果指针是指向数组的指针,则无法获得数组的元素数。你想解决的是实际问题吗?我没有用-1作为结尾,如果我不知道最后一个字符,如何继续?你不能。您传递的是一个指针,而不是数组,如果指针是指向数组的指针,则无法获得数组的元素数。你想解决什么实际问题吗?我不明白。。int*q=p;你为什么用它??还有为什么返回q-p??如果-1只出现在数组的末尾,并且总是出现在数组的末尾,那么我提供的代码将返回项目的计数。好的。但是为什么要返回q-p???*q是q[0]的缩写。由于q在循环中不断增加,所以您正在测试q[0]、q[1]、q[2]等等。这就像测试a[0]、a[1]、a[2],直到您得到数组中出现-1的位置。我不明白。。int*q=p;你为什么用它??还有为什么返回q-p??如果-1只出现在数组的末尾,并且总是出现在数组的末尾,那么我提供的代码将返回项目的计数。好的。但是为什么要返回q-p???*q是q[0]的缩写。因为q在循环中不断增加,所以您正在测试q[0]、q[1]、q[2]等等,这就像测试a[0]、a[1]、a[2],直到得到数组中出现-1的位置。