use*_*444 -1 c++ arrays return
为什么以下代码不起作用?
它编译得很好但输出就像地址,如果我写f
使用*
,输出是0
如果我写f
没有*
.
#include <iostream>
#include<cstring>
using namespace std;
using std::size_t;
int *f(size_t s){
int *ret=new int[s];
for (size_t a=0;a<s;a++)
ret[a]=a;
return ret;
}
int main(){
size_t s=20;
cout<<*f(s)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Kla*_*aim 12
你正在使用C++,只需使用std :: vector,它简化了一切:
#include <iostream>
#include <vector>
std::vector<int> f(size_t s){
std::vector<int> ret( s );
for (std::size_t a=0;a<s;a++)
ret[a]=a;
return ret;
}
int main(){
std::size_t s = 20;
std::vector<int> v = f(s);
for( std::vector<int>::iterator it = v.begin(); it != v.end(); ++it ) // go through each element
std::cout<< *it << std::endl;
for( int idx = 0; idx != v.size(); ++idx ) // simpler variant that is equivalent in this example
std::cout<< v[idx] << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
cod*_*ict 11
该函数f(s)
返回动态分配的数组的地址.
如果你这样做
cout<<f(s)<<endl;
,将打印地址,如果你这样做cout<<*f(s)<<endl;
是在索引打印值0
是0
.
如果要打印整个数组,请运行循环:
int *p = f(s);
for (size_t a=0;a<s;a++) {
cout<<*(p+a)<<endl;
}
Run Code Online (Sandbox Code Playgroud)