直接指向任意动态长度的元素无指针运算的元素数 < >是否可以编写一个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或动态确定的数字),然后按从小到大的升序将它们打印出来,全部不使用数组。