引用结构中的指针时是否可以使用 "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
}