【发布时间】:2013-03-06 20:03:40
【问题描述】:
如何找到传递给函数的字符串数组的大小。大小应在函数内部计算。
#include<iostream>
using namespace std;
template <typename T,unsigned S>
unsigned arraysize(const T (&v)[S]) { return S; }
void func(string args[])
{
unsigned m=arraysize(args);
cout<<m;
}
int main()
{
string str_arr[]={"hello","foo","bar"};
func(str_arr);
}
我不明白的是:
如果在main中使用arraysize(str_arr)这个语句,不会有问题。 str_arr 是一个数组,所以 str_arr 充当一个指针,所以当我们使用 arraysize(str_arr) 时,这意味着我们正在将地址发送给 arraysize 函数。(如果我错了,请纠正我)。
但在函数func()中,我不明白为什么会出现问题,即语句arraysize(args)发送字符串数组args的地址(或指针args的地址)..还是更复杂,因为它变成一些双指针??解释一下?
另外请更正上面的代码..
【问题讨论】:
-
无法确定数组大小和指针大小。并非没有专用的终止字节。这就是我们从 argc 开始的原因。
-
另一个使用
std::vector的理由。 -
这是 java 数组相对于 c++ 指针的优势之一,数组的大小可从数组本身获得。 Dmitry 是正确的,在 C++ 中,您要求的内容是不可能的。
-
@Dmitry 确定数组大小很容易(它在类型中,所以
sizeof可以使用它),前提是您确实有一个数组,而不是指向数组第一个元素的指针; -) -
@Dmitry 说到混淆,我在你的定义中也看到了很多混淆 ;-) char 确实是一个字节,因为它是 C-the- 的最小可寻址内存单元语言,但它不是所有平台上的八位字节(8 位)。
int没有被定义为双字,除非可能被某些 ABI 定义(当您希望您的软件在多个单一平台上运行时,这确实不值得)。 Unicode 字符在任何意义上都不是 16 位 - UTF-16 代码单元,但这很少有用或重要(还有其他更好的编码;并非所有 代码点 i> 适合 16 位)。
标签: c++ arrays function parameters size