我正在编写一个函数,它将int和int数组作为参数,如果int在数组中,则返回true。
boolean in_array(int subject,int array[]){
int length;
int k;
length = sizeof(array)/sizeof(array[0]);
for(k=0;k<length;k++){
if(array[k]==subject) return true;
}
return false;
}
该函数无法正常工作,因为sizeof(array)/ sizeof(array [0])不会返回长度。无论数组有多长,sizeof(数组)总是返回2接缝。
那么如何找到数组长度以找出int是否在数组中?
答案 0 :(得分:0)
将数组作为参数传递给函数时,数组变量将转换为指向数组的指针。
因此,sizeof
不会返回数组中的字节数,它将返回指针中的字节数。您必须将数组的长度作为单独的变量传递或包含某种终止元素(例如,C样式的字符串,使用空字符\0
来终止字符串)。
我已经建立了一个程序来演示所有这些:
#include <iostream>
#include <typeinfo>
void func(int a[10], int b[]){
std::cout<<"a (inside function): "<<sizeof(a)<<"\n";
std::cout<<"b (inside function): "<<sizeof(b)<<"\n";
std::cout<<"a (inside function type): "<<typeid(a).name()<<std::endl;
std::cout<<"b (inside function type): "<<typeid(b).name()<<std::endl;
}
int main(){
int a[10];
int b[40];
std::cout<<"a (outside function): "<<sizeof(a)<<"\n";
std::cout<<"a (outside function type): "<<typeid(a).name()<<std::endl;
func(a,b);
}
输出结果为:
a (outside function): 40
a (outside function type): A10_i
a (inside function): 8
b (inside function): 8
a (inside function type): Pi
b (inside function type): Pi
请注意,在函数外部,a
是一个长度为10(A10_i
)的int数组,其大小已知。在函数内部,a
和b
都是int的指针(Pi
),并且数组的总大小是未知的。