在C++中将数组作为函数参数传递

24

在C++中,数组不能简单地作为参数传递。这意味着如果我创建了以下函数:

void doSomething(char charArray[])
{
    // if I want the array size
    int size = sizeof(charArray);
    // NO GOOD, will always get 4 (as in 4 bytes in the pointer)
}
我无法知道数组有多大,因为我只有指向该数组的指针。
在不更改方法签名的情况下,我有哪些方法可以获取数组的大小并遍历其数据?
编辑: 关于解决方案的一个附加说明。如果字符数组是这样初始化的:
char charArray[] = "i am a string";

那么 \0 已经附加到数组的末尾。在这种情况下,答案(标记为已接受)可以直接使用。


2
实际上这里存在一个相当大的误解。您示例中的语法没有意义:函数在堆栈上接收未知数量的数据。编译器实际上忽略了您原始的语法,并为函数提供了签名“void doSomething(char* charArray)”。如果您使用“char array[10]; doSomething(array);”调用它,则不会保留任何数组状态。请参阅http://c-faq.com/aryptr/aryptrparam.html - kfsone
12个回答

-2

我认为你可以做到这一点:

size_t size = sizeof(array)/sizeof(array[0]);

顺便说一下,我认为这个主题的标题也不正确。


2
不,OP中的所有语句都是正确的。大问题在于,在定义void doSomething(char charArray[]) {/*...*/}时,参数charArray实际上并不是一个数组。 - aschepler

-3
兄弟,你可以使用全局变量来存储数组的大小,这样整个程序都可以访问它。至少你可以从main()函数传递数组的大小到全局变量中,而且你甚至不需要改变方法签名,因为大小将在全局范围内可用。
请参考以下示例:
#include<...>
using namespace std;

int size; //global variable

//your code

void doSomething(char charArray[])
{
    //size available

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接