C 如何找到数组的大小? 如何通过只接收指向数组指针的函数来查找数组的大小?
除非传递数组的大小,否则无法执行此操作。如果在您的情况下,-1是标记列表末尾的哨兵,您可以使用此选项: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
#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的位置。