我正在学习第五版的C++ Primer,目前正在学习有关返回数组指针的内容。该函数的声明如下:
int (*func(int i))[10];
预计返回一个数组指针。
我编写了以下代码:
#include <iostream>
#include <string>
using namespace std;
int *func(){
static int a[]={1,2,3};
return a;
}
int main (){
int *p=func();
for(int i=0;i!=3;++i){
cout<<*(p+i);
}
}
它正在起作用。但我想知道我所做的这个与之间的区别。
int (*func(int i))[10];
我该如何使这个函数调用起来?因为在书中,没有任何具体的例子。
a
数组名、int*
和数组地址&a
、int(*)[5]
的区别。阅读链接中的回答可能会对你有所帮助。 - Grijesh Chauhana
的类型是int[3]
,它会衰减为int*
。重要的是,你将地址存储在int* p
中,并且可以使用p[i]
访问数组的元素。而如果你的函数是int (*func(int i))[3]
,那么你将返回&a
并分配给int(*p)[3]
,并且可以访问(*p)[i]
。 - Grijesh Chauhanint a [] = {1, 3, 3}
而不使用static
关键字,则会变成有错误的代码。因为本地数组的生命周期和范围只存在于函数返回之前。 - Grijesh Chauhan