引用结构中的指针时是否可以使用 "cin" ?
Is it possible to use "cin" while referring to a pointer in structure?
此代码在 cin
语句处显示错误。这是为什么?
这里是错误:
no match for 'operator>>' (operand types are 'std::istream' {aka 'std::basic_istream<char>'} and 'int*')
#include<bits/stdc++.h>
using namespace std;
struct go {
int size, *p;
} r;
int main()
{
int sum = 0;
r.size = 10;
r.p = (int*) malloc(r.size * sizeof(int));
for(int i = 0; i < r.size; i++){
cin >> (r.p + i); // this line is showing error
sum = sum + (*(r.p + i));
}
cout << sum;
}
This code is showing error at cin statement.Why is this so?
因为没有从字符流中提取指针的重载。
如果要读入指向的整数,直接通过指针间接:
std::cin >> r.p[i];
sum += r.p[i];
P.S。避免在 C++ 中使用 malloc
,并避免拥有裸指针。在这种情况下,std::vector
可能是更好的选择。
std::istream
没有 operator>>
来读取 int*
指针。这正是错误消息所说的内容。
您真正想要做的是读入您正在分配的数组的各个 int
元素。这意味着您需要引用 int*
指针,以便您可以使用读取 int
值的 operator>>
。就像在将 int
值添加到 sum
.
时取消引用指针一样
#include <iostream>
#include <cstdlib>
using namespace std;
struct go {
int size, *p;
} r;
int main()
{
int sum = 0;
r.size = 10;
r.p = (int*) malloc(r.size * sizeof(int));
// better: use new[] instead of malloc()
// better: change r.p from int* to std::vector<int>, then use:
// r.p.resize(r.size);
for(int i = 0; i < r.size; i++){
cin >> *(r.p + i); // or: cin >> r.p[i];
sum += *(r.p + i); // or: sum += r.p[i];
}
cout << sum;
free(r.p);
// better: use delete[] instead of free()
// better: let std::vector free the memory for you
}
此代码在 cin
语句处显示错误。这是为什么?
这里是错误:
no match for 'operator>>' (operand types are 'std::istream' {aka 'std::basic_istream<char>'} and 'int*')
#include<bits/stdc++.h>
using namespace std;
struct go {
int size, *p;
} r;
int main()
{
int sum = 0;
r.size = 10;
r.p = (int*) malloc(r.size * sizeof(int));
for(int i = 0; i < r.size; i++){
cin >> (r.p + i); // this line is showing error
sum = sum + (*(r.p + i));
}
cout << sum;
}
This code is showing error at cin statement.Why is this so?
因为没有从字符流中提取指针的重载。
如果要读入指向的整数,直接通过指针间接:
std::cin >> r.p[i];
sum += r.p[i];
P.S。避免在 C++ 中使用 malloc
,并避免拥有裸指针。在这种情况下,std::vector
可能是更好的选择。
std::istream
没有 operator>>
来读取 int*
指针。这正是错误消息所说的内容。
您真正想要做的是读入您正在分配的数组的各个 int
元素。这意味着您需要引用 int*
指针,以便您可以使用读取 int
值的 operator>>
。就像在将 int
值添加到 sum
.
#include <iostream>
#include <cstdlib>
using namespace std;
struct go {
int size, *p;
} r;
int main()
{
int sum = 0;
r.size = 10;
r.p = (int*) malloc(r.size * sizeof(int));
// better: use new[] instead of malloc()
// better: change r.p from int* to std::vector<int>, then use:
// r.p.resize(r.size);
for(int i = 0; i < r.size; i++){
cin >> *(r.p + i); // or: cin >> r.p[i];
sum += *(r.p + i); // or: sum += r.p[i];
}
cout << sum;
free(r.p);
// better: use delete[] instead of free()
// better: let std::vector free the memory for you
}