我正在尝试编写一个打印出数组中元素的函数.但是,当我使用传递的数组时,我不知道如何迭代数组.
void
print_array(int* b)
{
int sizeof_b = sizeof(b) / sizeof(b[0]);
int i;
for (i = 0; i < sizeof_b; i++)
{
printf("%d", b[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
迭代传递的数组的最佳方法是什么?
Bri*_*ndy 16
您还需要将数组的大小传递给函数.
将数组传递给函数时,实际上是在传递该数组中第一个元素的地址.所以指针只指向函数内部的第一个元素.
由于数组中的内存是连续的,您仍然可以使用指针算法,例如(b+1)指向第二个元素或等效b[1]
void print_array(int* b, int num_elements)
{
for (int i = 0; i < num_elements; i++)
{
printf("%d", b[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
这个技巧只适用于数组而不是指针:
sizeof(b) / sizeof(b[0])
Run Code Online (Sandbox Code Playgroud)
...和数组与指针不同.
为什么不使用函数模板(C++)?
template<class T, int N> void f(T (&r)[N]){
}
int main(){
int buf[10];
f(buf);
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
qn现在似乎有C标记,并且C++标记被删除.