【问题标题】:Why dereferencing is not required in pointer array? [duplicate]为什么指针数组中不需要解引用? [复制]
【发布时间】:2021-12-15 10:44:17
【问题描述】:

在下面编写的代码中,当从cin 读取时,我们应该在arr[i] 之前使用* 运算符。但没有它,这段代码就可以完美运行。这是为什么呢?

同样,当我们使用指针数组写入cout 时,我们不使用*。例如,考虑堆上的多维指针数组 - cout << vararr[i][j] << endl; 这也有效。

int* variablesizedarr(int size){
    int* arr = new int [size];
    for(int i = 0;i < size; i++){
        cin >> arr[i]; //shouldn't it be *arr[i] if the input is integers
    }
    return arr;
}

【问题讨论】:

    标签: c++ arrays pointers


    【解决方案1】:

    我们应该在arr[i]之前使用*运算符

    不,那会是一个错误。

    来自cppreference

    内置的下标表达式E1[E2]与表达式*(E1 + E2)完全相同除了求值顺序(C++17起),即指针操作数(可能是数组到指针转换的结果,并且必须指向某个数组的元素或末尾的元素)被调整为指向同一数组的另一个元素,遵循指针算术规则,然后被取消引用。

    所以operator[] 负责解除引用。

    【讨论】:

    • 谢谢。我不知道,因为我在解决编码问题时正在学习。而且我很确定这个问题之前没有在堆栈溢出中讨论过。我不明白反对意见。
    • @ssrm7_bot,你应该不太确定很多事情。并在询问之前花更多时间搜索。 Here 已经给出答案的众多地方之一。
    • 是的,我同意我需要使用更好的标签和关键字进行搜索。这本身就是一种技能。再次感谢
    猜你喜欢
    • 2021-01-20
    • 2018-02-20
    • 2012-06-02
    • 2014-01-26
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2011-03-05
    相关资源
    最近更新 更多