c++ - 在函数中分配指向数组的指针
问题描述
所以我看到了这段代码,我得到了大部分代码,直到它应该分配一个指向数组的指针。目标是分配是必须编程打印出 100 99 98 3 2 1。所以在我看来,函数 f 什么都不做,所以我删除了它。我的问题是如何将指针分配给函数内的数组?我还认为返回数组会起作用,但没有成功。提前致谢
#include <iostream>
using namespace std;
int* nochange(int* p)
{
return p;
}
int* getPtrToArray(int& m)
{
int anArray[100];
for (int j = 0; j < 100; j++)
anArray[j] = 100-j;
m = 100;
return nochange(anArray);
}
void f()
{
int junk[100];
for (int k = 0; k < 100; k++)
junk[k] = 123400000 + k;
junk[50]++;
}
int main()
{
int n;
int* ptr = getPtrToArray(n);
f();
for (int i = 0; i < 3; i++)
cout << ptr[i] << ' ';
for (int i = n-3; i < n; i++)
cout << ptr[i] << ' ';
cout << endl;
}c
解决方案
您可以像这样从函数返回指针:
int* getPtrToArray(int& m)
{
int *anArray = new int[100];
for(int j = 0; j < 100; j++)
anArray[j] = 100 - j;
m = 100;
return anArray;
}
int main()
{
int n = 0;
int* ptr = getPtrToArray(n);
for(int i = 0; i < 3; i++)
cout << ptr[i] << ' ';
for(int i = n - 3; i < n; i++)
cout << ptr[i] << ' ';
cout << endl;
delete []ptr; // you should free memory here
}
但这是一种糟糕的风格:在一个地方分配内存,在另一个地方释放。
更好地将指向数组的指针传递到函数中,如下所示:
void fillArray(int *arr, int m)
{
for(int j = 0; j < m; j++)
arr[j] = m - j;
}
int main()
{
const int M=100;
int arr[M] = {0};
fillArray(arr, M);
//...
}
更现代的方法涉及使用向量:
#include <vector>
vector<int> getArray()
{
vector<int> arr(100);
for(int j = 0; j < 100; j++)
arr[j] = 100 - j;
return arr;
}
int main()
{
auto arr = getArray();
size_t n = arr.size();
// ...
for(int i = n - 3; i < n; i++)
cout << arr[i] << ' ';
}
推荐阅读
- python - python 3 print end=""的pycharm语法检查错误但仍然可以正常工作
- javascript - 页面打开时如何预先计算表格单元格中的总数
- haskell - Verify RSA signature with public key in PEM format in Haskell
- php - 在 Laravel 的 Eloquent 查询中使用“with”时如何添加 where 子句
- c - 了解汇编与 C 对应物
- java - Tab 块中的所有行
- c# - 为什么 POCO 对象是使用类而不是结构创建的
- angular - Angular:图像未在生产中加载
- mysql - ,(comma) 和 and in group by 有什么区别?
- kubernetes - 如何修复 Windows 10 上 minikube 版本 0.33.1 的 minikube 安装失败?- 重新启动集群时出错 - 加载 apiserver 证书失败