直接指向任意动态长度的元素无指针运算的元素数 < >是否可以编写一个C++程序,分配用户输入的元素个数,并给用户输入值,然后直接指向那些刚分配的元素,而不用指针运算?我这样问是因为人脑不认为“第七个元素是第一个元素的地址+6步前”;它完全可以绑定动态创建的元素及其当前属性集。如果C++中是可能的,它自然会加快程序执行速度。

直接指向任意动态长度的元素无指针运算的元素数 < >是否可以编写一个C++程序,分配用户输入的元素个数,并给用户输入值,然后直接指向那些刚分配的元素,而不用指针运算?我这样问是因为人脑不认为“第七个元素是第一个元素的地址+6步前”;它完全可以绑定动态创建的元素及其当前属性集。如果C++中是可能的,它自然会加快程序执行速度。,c++,pointers,input,dynamic,pointer-arithmetic,C++,Pointers,Input,Dynamic,Pointer Arithmetic,澄清我所指内容的示例代码: // // main.cpp // This code doesn't compile // but it's for clarification purposes // Created by Måns Nilsson on 2017-01-02. // Copyright © 2017 Måns Nilsson. All rights reserved. // #include <iostream> using namespace std;

澄清我所指内容的示例代码:

//
//  main.cpp
//  This code doesn't compile
//  but it's for clarification purposes
//  Created by Måns Nilsson on 2017-01-02.
//  Copyright © 2017 Måns Nilsson. All rights reserved.
//

#include <iostream>

using namespace std;

int main(int argc, const char * argv[]) {
    int currval;
    int otherval;
    int arrlength;
    cout<<"How many elements would you like to allocate?"<<endl<<"Your input: ";
    cin >> arrlength;
    int numlist[arrlength];

    //User inputs the element values and variables are assigned to
    //point directly to each element
    for(int i=0;i<arrlength;i++) {
        cout<<"Enter a value for element "<<(i + 1)<<": ";
        cin >> currval;
        numlist[i] = currval;
        int &var(i) = numlist[i];
    }

        cout<<"Enter the index of the element you want to modify: ";
        cin >> currval;
        cout<<"Enter a new value for element "<<currval<<": ";
        cin >> otherval;
        var(currval-1) = otherval;

    return 0;
}
//
//main.cpp
//这段代码不能编译
//但这是为了澄清
//由Måns Nilsson于2017-01-02创建。
//版权所有©2017 Måns Nilsson。版权所有。
//
#包括
使用名称空间std;
int main(int argc,const char*argv[]{
国际货币;
int-otherval;
内角长度;

coutC++允许在新分配的数组中设置对元素的引用:

int *arr = new int[10];
int &elt6 = arr[6];
...
elt6 = 12; // actually sets arr[6]

这里的要点是,一旦定义了引用,就可以像普通变量一样使用数组的内存。但是,在某个时刻,你必须使用指针算术来告诉编译器你想引用什么数组元素。

“如果C++中有可能,它自然会加快程序的执行速度。”哈?你为什么会这样想?我不确定我是否理解这个问题。如果你有,比如说,
int*arr=new int[someSize];
,你可以写
arr[7]
-它的意思与
*(arr+7)完全相同
。又是什么问题呢?想象一下,不知何故,你想要的工具存在。你会如何使用它?展示一个假设的代码,你本可以使用这种工具编写,但不能没有。给我涂上浓淡的颜色,但我不知道你在抱怨什么;也许一个例子可以帮助我理解。但是哪个元素是“任何元素”?如果不是通过数组中的索引,你打算如何识别你想要使用的特定元素?嘿,如果你有重新实现我们在过去半个世纪中建立的所有逻辑的愿景,那就去吧。但是你必须说服很多人。
int arr=new int[10];
不会编译。现在
int&elt6=arr+6;
不会编译。所以唯一的方法是编写两个程序,其中一个是在用户指定要分配的元素数量后修改另一个程序。@MånsNilsson:年初我很累(原来三行有两个错误…)但是我真的无法理解你的评论。这个片段由一行代码中的两行组成program@MånsNilsson出于学习目的,我希望您尝试编写一个程序,提示用户输入10个整数(我甚至没有要求输入100或动态确定的数字),然后按从小到大的升序将它们打印出来,全部不使用数组。