我声明一个静态char数组,然后我将它传递给一个函数.怎么得到没有.函数内部数组中的字节数?
使用具有非类型模板参数的函数模板:
templatevoid func(char (&a)[N]) { for (int i = 0; i < N; ++i) { cout << "a[" << i << "] = " << a[i] << endl; // Or whatever you want to do } }
致电:
char myArray[500]; // Or "static char myArray[500]", if you want func(myArray);
这个函数的新副本将针对调用它的每个不同大小的数组进行实例化,因此如果你用许多不同大小的数组调用它,你会得到一些代码膨胀.但事实并非如此.
你必须将它传递给函数.您可以使用sizeof()来获取数组的大小.
const char foo[] = "foobar"; void doSomething( char *ptr, int length) { } doSomething(foo, sizeof(foo));
这个MSDN页面解释了有关sizeof的更多信息,并有一个更大的例子.
编辑:*请参阅j_random_hacker关于使用模板的有趣技术的答案 ......*