我写了一个函数:
string par(int a[]){
int s=sizeof(a)/sizeof(*a);
cout<<s<<endl;
/*
..do something
*/
}
主要功能写为:
nt main(){
int a[]={1,5,11,5};
cout<<sizeof(a)/sizeof(*a)<<endl;
cout<<par(a)<<endl;
}
我得到的输出是:
4
1
虽然我认为它应该与我传递相同的数组相同。请指出错误。谢谢..
答案 0 :(得分:2)
在C ++中,当一个数组作为参数传递给一个函数时,实际上你正在传递一个指向数组的指针。
由于指针和int的大小是4或8(取决于ABI,因为你得到1然后我猜你有32位机器)你得到4/4即1。
所以
int s=sizeof(a)/sizeof(*a);
为1。
您应该将大小作为参数传递,而不是尝试在函数内计算它:
string par(int a[], int size)
答案 1 :(得分:1)
你需要将数组的大小传递给函数,你不能从“x []”计算大小:
string par(int a[], int size){
答案 2 :(得分:1)
传递string par(int a[])
实际上并没有传递数组,而是传递数组的地址,即string par(int *a)
。因此该函数不知道已经传递了4个元素的数组。它知道已经传递了整数数组的指针。因此,该函数返回1作为数组大小。
答案 3 :(得分:1)