C++ 通过指针传递数组

C++ 通过指针传递数组,c++,arrays,C++,Arrays,如何获取循环条件和打印元素的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); } void Func(int(*a)[5]) { 对于(int i=0;i

如何获取循环条件和打印元素的
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);
}
void Func(int(*a)[5])
{
对于(int i=0;i<5;i++)

cout如果主要强调传递数组的大小,则使用函数模板会更好

template <typename T, size_t N>
void Func(T (&a)[N])
{  
    for (int i = 0; i < N; i++)
      cout << a[i]; 
}
模板
无效函数(T&a)[N])
{  
对于(int i=0;icout如果主要强调传递数组的大小,则使用函数模板会更好

template <typename T, size_t N>
void Func(T (&a)[N])
{  
    for (int i = 0; i < N; i++)
      cout << a[i]; 
}
模板
无效函数(T&a)[N])
{  
对于(int i=0;icout将数组传递给函数时,它将降级为指针,所有大小信息都将丢失。

将数组传递给函数时,它将降级为指针,所有大小信息都将丢失。

void Func(int*a)
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);
}
{ 对于(int i=0;i<5;i++) cout
void Func(int*a)
{
对于(int i=0;i<5;i++)

cout您可以使用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);
}
#包括
#包括
使用名称空间std;
void Func(向量a){
对于(int i=0;icout您可以使用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);
}
#包括
#包括
使用名称空间std;
void Func(向量a){
对于(int i=0;icout它不起作用,因为你没有足够的反引用它。你有一个指向数组的指针-指针需要反引用,数组需要索引

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);
}
void Func(int(*a)[5])
{
对于(int i=0;i<5;i++)

std::cout它不起作用,因为您没有足够的反引用。您有一个指向数组的指针-该指针需要反引用,而数组需要索引

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);
}
void Func(int(*a)[5])
{
对于(int i=0;i<5;i++)
标准::cout
如何获取数组的大小

您在编译时已经知道大小,它是5。您只是忘记了取消引用指针:

cout << (*a)[i];
cout
如何获取数组的大小

您在编译时已经知道大小,它是5。您只是忘记了取消引用指针:

cout << (*a)[i];

cout首先,访问数组的方式是错误的。在函数中有一个指向数组的指针。在对其使用
[]
运算符之前,必须先取消对该指针的引用

void Func(int (*a)[5])
{
   for (int i = 0; i < 5; i++)
      cout << (*a)[i];
}

在这种情况下,
sizeof*a/sizeof**a
表达式的计算值保证为5。

首先,您访问数组的方式是错误的。在函数中有一个指向数组的指针。在对其使用
[]
运算符之前,必须先取消对指针的引用

void Func(int (*a)[5])
{
   for (int i = 0; i < 5; i++)
      cout << (*a)[i];
}

在这种情况下,
sizeof*a/sizeof**a
表达式的计算结果保证为5。

您没有-没有possible@JT(一个非常烦人的标签,顺便说一句)通常不可能更准确:-)我想知道
int(*a)[5]<代码>它是不可操作的。它只是C语言的历史。你可以使用数组作为参数类型,但是它会衰减到指针。如果你使用C++,你应该使用一个知道它自己大小的STD::vector。你可能想读我们的。你不知道。possible@JT(顺便说一句,这是一个非常讨厌的标签)通常不可能更准确:-)我想知道
int(*a)[5]如果它不能工作,它仅仅是C语言的历史。你可以使用数组作为参数类型,但是它会衰减到指针。如果你使用C++,你应该使用一个知道它自己大小的STD::vector。你可能想读我们的代码。
?@user:您已经告诉编译器您指向一个由5个整数组成的数组。您还希望了解该数组的其他信息吗?是的,
sizeof(*a)/sizeof(int)
将产生5个整数,但是您已经知道了。那么
int size=sizeof(*a)/sizeof(int)呢
?@user:您已经告诉编译器您指向一个由5个整数组成的数组。您还希望了解该数组的其他信息吗?是的,
sizeof(*a)/sizeof(int)
将产生5个整数,但您已经知道了。