检查Int是否在数组C / C ++中

时间:2015-09-03 02:13:16

标签: c++ c arrays

我正在编写一个函数,它将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是否在数组中?

1 个答案:

答案 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数组,其大小已知。在函数内部,ab都是int的指针(Pi),并且数组的总大小是未知的。