2017-01-02 9 views
-5

사용자가 입력 한 요소 수를 할당하고 사용자가 입력 한 값을 할당 한 다음 C++ 프로그램으로 직접 입력 할 수 있습니까? pointer arithmetic을 사용하지 않고 방금 할당 된 요소? 저는 인간의 두뇌가 "일곱 번째 요소가 첫 번째 요소의 주소 + 앞으로의 6 단계"라고 생각하지 않기 때문에 이것을 묻습니다. 동적으로 생성 된 요소와 현재의 속성 집합을 절대적으로 바인딩 할 수 있습니다. 이것이 C++에서 가능하다면 자연스럽게 프로그램 실행을 가속화 할 것입니다.포인터 연산이없는 동적 길이 요소의 요소를 직접 가리 키십시오.

예제 코드는 내가 말하는 겁니다 무엇인지 명확히 :

// 
// 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; 
} 
+1

* "C++에서 가능하다면 자연스럽게 프로그램 실행 속도가 빨라집니다."* 응? 왜 그렇게 생각하니? –

+1

나는 그 질문을 이해하고 있는지 확신 할 수 없다. 'int * arr = new int [someSize];'라고하면,'arr [7]'을 쓸 수 있습니다 - 이것은'* (arr + 7)'과 정확히 같은 의미입니다. 다시 문제는 무엇입니까? –

+0

첫 번째 요소의 주소에서 시작하여 6을 추가하면 7 번째 요소의 주소 인 * (arr + 6)이됩니다. 그러나 요소 주소를 직접 알기 위해 동적으로 새 변수를 만들 수는 없습니다. 여전히 포인터 연산을 사용합니다. –

답변

0

C++가 새롭게 할당 할 수 있었던 배열의 요소에 대한 참조를 설정할 수 있습니다 :

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

여기서 포인트는 것입니다을 일단 참조을 정의하면 배열의 메모리를 공유하는 일반 변수와 똑같이 사용합니다. 그러나 어느 순간, 포인터 연산을 사용하여 컴파일러에게 어떤 배열 요소를 참조 할지를 알려줘야합니다.

+0

'int arr = new int [10];'는 컴파일되지 않습니다. –

+2

이제'int & elt6 = arr +6;'이 컴파일되지 않습니다. –

+0

그래서 유일한 방법은 두 개의 프로그램을 작성하는 것입니다. 하나는 사용자가 할당 할 요소의 수를 지정한 후에 다른 프로그램을 수정하는 것입니다. –