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]));
就明白了
加两句
Form1->Memo1->Lines->Add((sizeof(p));
Form1->Memo1->Lines->Add((sizeof((*p)[0]));
就明白了
#4
如果我想显示所有的话,就一定要在主调函数中传入数组大小喽,否则就没有办法了
,c++不提供检测数组大小的功能的吗?在delphi中像 high(数组) 这样的功能在C++中怎么办呢。
,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++的信心咸底了
对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]));
就明白了
加两句
Form1->Memo1->Lines->Add((sizeof(p));
Form1->Memo1->Lines->Add((sizeof((*p)[0]));
就明白了
#4
如果我想显示所有的话,就一定要在主调函数中传入数组大小喽,否则就没有办法了
,c++不提供检测数组大小的功能的吗?在delphi中像 high(数组) 这样的功能在C++中怎么办呢。
,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++的信心咸底了
对C++的信心咸底了