尝试编写一个程序,将值从一个指定的数组转换为另一个未指定的数组。我写的代码:
#include "stdafx.h";
#include <iostream>;
using namespace std;
int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int j[10];
int copy_array(int *p1, int n);
int *p2, *p2;
int main() {
for (int l = 0; l < 10; l++) {
cout << a[l] << endl;
}
copy_array(a, 10);
for (int i = 0; i < 10; i++) {
j[i] = &p2;
cout << j[i] << endl;
}
system("PAUSE");
return 0;
}
int copy_array(int *p1, int n) {
while (n-- > 0) {
*p1 = *p2;
*p1++;
*p2++;
}
}
我正在使用Microsoft visual studio平台,我得到的错误是“没有可以进行此转换的上下文”。为什么我不能使用这个int转换路径?如何使用int类型转换修复和连接2个数组(如果可能的话)?
我试过操作本地函数copy_array所以它使用j [10]数组整数的地址进行转换,但这给了我另一个错误。任何支持和建议将不胜感激。
答案 0 :(得分:0)
您不需要p2是全球性的。
只需将参数添加到copy_array
。
void copy_array(int *p1, int *p2, int n) {
while (n-- > 0) {
*p1 = *p2;
p1++;
p2++;
}
}
并且这样打电话:
copy_array(j, a, 10);
另外:打印你刚刚复制的副本:
for (int i = 0; i < 10; i++) {
cout << j[i] << endl;
}
答案 1 :(得分:0)
以下是您的代码的一些注释:
p2
声明:int *p2, *p2;
。您还需要初始化它。所以吧:int *p2 = j;
(事实上,你实际上并不需要使用这个全局变量 - 你可以根据需要传递j
来达到同样的效果。)*p2 = *p1;
不是*p1 = *p2;
- 右侧分配到左侧。j
时,您不需要j[i] = &p2;
来改变j
的内容。纠正它们,你的代码应该可以正常工作。
但是,您根本不需要指针。
请考虑以下代码并将其与您的代码进行比较:
#include <iostream>
using namespace std;
void copy_array(int [], int [], int);
void print_array(int [], int);
int main() {
int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int j[10];
print_array(a,10);
copy_array(a, j, 10);
print_array(j,10);
return 0;
}
void copy_array(int s[], int d[], int n) {
for (int i = 0; i < n; i++)
d[i] = s[i];
} // s for source & d for destination
void print_array(int arr[], int n) {
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << "\n\n";
}
答案 2 :(得分:0)
我希望以@ Shadi的答案为基础,你应该投票,并使代码更加C ++ - 惯用。
return 0;
;如果你还没有归还其他任何东西,那就暗示了。i
和j
是整数标量的公共变量名,例如计数器 - 不是数组。我建议您对数组使用a
和b
,或values
和copy_of_values
等。std::vector
。它与数组不完全相同;例如,它使用动态分配的内存,并且可以增大或缩小。您可能想要使用它的原因是它允许您执行普通分配,并使用其他标准库工具。因此Shadi的节目变成了:
#include <iostream>
#include <vector>
void print_vector(const std::vector<int>& vec);
int main() {
std::vector<int> a { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
std::vector<int> b;
print_vector(a);
b = a;
print_vector(b);
}
void print_vector(const std::vector<int>& vec) {
// this next line uses syntax from the 2011 version of
// the C++ language standard ("C++11").
for(int x : vec) {
std:cout << x << " ";
}
cout << "\n\n";
}
std::for_each
或std::for_each_n
完全避免print_vector
中的循环,但这需要一些迭代器和lambda函数的知识,这对于初学者,所以我不会进入那个。但更好的是,您可以为std::vector
定义一个外流式运算符,如here所示,您可以使用std::cout << a;
编写private static int[] print(int[] lemons)
{
for(int k = 0; k < lemons.length; k++)
{
System.out.print(lemons[k] + " ");
}
return lemons;
}
并使其工作。