如何在void Func(int (*a)[5])
中获取循环条件和打印元素的数组大小?
void Func(int (*a)[5])
{
for (int i = 0; i < 5; i++)
cout << a[i]; // doesn't work
}
int main()
{
int a[] = {1, 2, 3, 4, 5};
Func(&a);
}
答案 0 :(得分:3)
如果主要强调传递数组的大小,那么使用函数模板会更好。
template <typename T, size_t N>
void Func(T (&a)[N])
{
for (int i = 0; i < N; i++)
cout << a[i];
}
答案 1 :(得分:3)
首先,您访问阵列的方式是错误的。在函数内部,你有一个指针到一个数组。在您使用[]
运算符
void Func(int (*a)[5])
{
for (int i = 0; i < 5; i++)
cout << (*a)[i];
}
其次,我不明白为什么你需要“获得”数组的大小,当大小在编译时固定,即它总是为5.但无论如何你可以使用众所周知的{ {1}}技巧
sizeof
在这种情况下,void Func(int (*a)[5])
{
for (int i = 0; i < sizeof *a / sizeof **a; i++)
cout << (*a)[i];
}
表达式保证评估为5。
答案 2 :(得分:1)
它不起作用,因为你没有足够的去引用它。你有一个指向数组的指针 - 指针需要取消引用,和数组需要索引。
void Func(int (*a)[5])
{
for (int i = 0; i < 5; i++)
std::cout << (*a)[i];
}
int main()
{
int a[] = {1, 2, 3, 4, 5};
Func(&a);
}
答案 3 :(得分:0)
将数组传递给函数时,它会降级为指针并且所有大小的信息都会丢失。
答案 4 :(得分:0)
您可以使用STL容器(如vector)来简化操作。
#include <iostream>
#include <vector>
using namespace std;
void Func(vector <int> a){
for (int i = 0; i < a.size(); i++)
cout << a[i];
}
int main (){
int nums[] = {1, 2, 3, 4, 5};
vector<int> a (nums, nums + sizeof(nums) / sizeof(int) );
Func(a);
}
答案 5 :(得分:0)
我如何获得数组的大小
你已经知道编译时的大小,它是5.你只是忘了取消引用指针:
cout << (*a)[i];
答案 6 :(得分:-1)
void Func(int * a)
{
for (int i = 0; i < 5; i++)
cout << *(a+i);
}
int main()
{
int a[] = {1, 2, 3, 4, 5};
Func(a);
}