2010-05-29 5 views
6

저는 새로운 프로그래밍 학생이기 때문에 제발 용서해주십시오. 내 할당 상태 :포인터를 특정 배열 위치로 어떻게 재설정합니까?

10 개의 정수 배열을 선언하는 프로그램을 작성하십시오. 키보드에서 10 개의 값을 받아들이고 10 개의 값을 표시하는 다른 루프를 작성하는 루프를 작성하십시오. 두 루프 내에서 첨자를 사용하지 마십시오. 포인터 만 사용하십시오. 나는 내 문제가 어디 있는지 알고 있다고 생각

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

int main() 
{ 
    const int NUM = 10; 
    int values[NUM]; 
    int *p = &values[0]; 
    int x; 
    for(x = 0; x < NUM; ++x, ++p) 
    { 
     cout << "Enter a value: "; 
     cin >> *p; 
    } 
    for(x = 0; x < NUM; ++x, ++p) 
    { 
     cout << *p << " "; 
    } 
    return 0; 
} 

:

여기 내 코드입니다. 첫 번째 루프가 끝나면 포인터는 값 [10]에 있지만 포인터를 표시하려면 다시 값 [0]으로 가져와야합니다. 어떻게해야합니까?

+1

이 더 nc3b @ – nc3b

+1

:-) C보다는 C++ 같은 소리 : 그렇지 않으면, 당신은 역을 인쇄하여 재미를 가질 수 나는했습니다 많은 대학에서는 C++을 가르치고 있지만 실제로 C는 cin과 cout으로 표시한다고합니다. – zneak

+0

너무 고등학교에서 일어난 일들 :-( – nc3b

답변

7

당신은 p을 할당 할 때 먼저했던대로 정확하게 할 수는 : 아주 많이 (당신은 변경할 수 없습니다) 포인터 처럼 정적으로 메모리를 할당하는

p = &values[0]; 

게다가, 배열된다. 따라서 표현 &values[0]은 단지 values과 동일한 것으로 평가됩니다. 따라서,

p = &values[0]; 

이 과제는 순서대로 번호를 인쇄해야한다고 말 했는가

p = values; 
+0

고맙습니다! – talena6

+2

@ohtanya : 문제 없습니다. 답이 제대로 작동하면 답을 수락하기 위해 답의 등급 아래에있는 체크 표시를 클릭하십시오 :) – zneak

+1

일반적인 믿음과 달리 배열은 * 아닙니다 * 포인터. 표준 언어 포인터에는 * 수정 가능한 l 값 *이 있으며 배열은 그렇지 않습니다. 요점을 설명하기 위해'p = values;와'values ​​= p;'두 가지 과제를 비교해보십시오. 그것은 이상한'& array [subscript]'구문의 출처입니다. 배열 이름이 'r-value'로 사용되기 때문에이 경우에 작동합니다. –

0

과 동일?

while (p != values) 
{ 
    cout << *(--p) << " "; 
} 

(. 그냥 학습이 코드를 사용)

관련 문제