关于函数参数为指向数组的指针的问题。

时间:2022-03-09 18:49:09
我想通过一个函数显示一个不定数组中的各元素。实现如下:但老是只能显示数组的第一个无素,其它都不显示了,请问是什么原因。我不想在主调函数中传入数组元素个数过去(因在Delphi中不用)。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int a[]={2,3,6,5,8};
  int i=disp(&a);
  this->Caption=IntToStr(i);//返回的数组元素个数老是为1
}

int disp(int (*p)[])
{
  for (int i=0;i<sizeof(p)/sizeof((*p)[0]);i++)
  {
    Form1->Memo1->Lines->Add((*p)[i]); //只显示第一个元素
  }
  return sizeof(p)/sizeof((*p)[0]);
}
以上不用函数则没问题。

7 个解决方案

#1


因为你使用sizeof(p)其结果为4,sizeof((*p)[0])的结果也是4,自然就是你说的情况了,给定一个数组指针是无法得到数组大小的。

#2


C++中不自动提供数组的大小的~楼上说的对

#3


结果一定只显示一个
加两句
Form1->Memo1->Lines->Add((sizeof(p));
Form1->Memo1->Lines->Add((sizeof((*p)[0]));
就明白了

#4


如果我想显示所有的话,就一定要在主调函数中传入数组大小喽,否则就没有办法了
,c++不提供检测数组大小的功能的吗?在delphi中像 high(数组) 这样的功能在C++中怎么办呢。

#5



改成
void disp(int (*p)[], int num)
{
  for (int i=0;i<num;i++)
  {
    Form1->Memo1->Lines->Add((*p)[i]); //只显示第一个元素
  }
}

#6


没办法,你必须要传一个数组大小进去

#7


delphi可以啊,难到C++的功能还没有delphi强大吗,并且有了high(a)最主要还可以检查数组是否越界。
对C++的信心咸底了

#1


因为你使用sizeof(p)其结果为4,sizeof((*p)[0])的结果也是4,自然就是你说的情况了,给定一个数组指针是无法得到数组大小的。

#2


C++中不自动提供数组的大小的~楼上说的对

#3


结果一定只显示一个
加两句
Form1->Memo1->Lines->Add((sizeof(p));
Form1->Memo1->Lines->Add((sizeof((*p)[0]));
就明白了

#4


如果我想显示所有的话,就一定要在主调函数中传入数组大小喽,否则就没有办法了
,c++不提供检测数组大小的功能的吗?在delphi中像 high(数组) 这样的功能在C++中怎么办呢。

#5



改成
void disp(int (*p)[], int num)
{
  for (int i=0;i<num;i++)
  {
    Form1->Memo1->Lines->Add((*p)[i]); //只显示第一个元素
  }
}

#6


没办法,你必须要传一个数组大小进去

#7


delphi可以啊,难到C++的功能还没有delphi强大吗,并且有了high(a)最主要还可以检查数组是否越界。
对C++的信心咸底了