2013-04-08 2 views
1

나는 포인터 작동 방식을 이해하려고 노력하고 있지만 첫 번째 요소에 대한 포인터는 모든 배열 당신은 동안이나 사용 할포인터에서 배열에 액세스하는 방법?

int myArray[10]; 
for(int i=0; i<10; i++) 
{ 
    myArray[i] = 11*i; 
} 

int *p; 
p = myArray; 

//Now how do I access the complete array using the variable p 

cout<<*p; //This only prints the first value, how to print all the values 
+1

이렇게하면 작동 방법과 작동 원리가 밝혀 질 수 있습니다. http://stackoverflow.com/questions/381542/in-c-arrays-why-is-this-true-a5-5a – chris

+1

'p = myArray'는'myArray'에서 * 배열 대 포인터 * 변환을 수행합니다. 첫 번째 요소에 대한 포인터가 생성됩니다. 전체 배열에 대한 포인터를 원한다면'int (* p) [10] = & myArray;'를 써야하지만'cout'으로 전체 배열을 인쇄 할 수는 없습니다. –

답변

2

당신은 예를 들어 POS (5)에 액세스하려면 , 당신은 쓸 수 있습니다 : 컴파일러 이후

... 
int *p; 
p = myArray; 

cout << p[5]; 

는 p가 int로 포인터 것을 알고, 각 단계 (이 경우에는 4 바이트)에 대해 int의 크기를 추가합니다. 포인터를 void로 사용하지 않는 한 컴파일러가 대신이 작업을 수행합니다. 배열의 길이를 추적해야 포인터가 포인터를 무시하기 때문에 초과하지 않도록해야합니다.

+0

'각 단계 (이 경우에는 4 바이트)에 int의 크기를 추가한다고 말하면 무엇을 의미합니까?' 포인터도 크기를 유지합니까, 나는 그들이 단지 00fx09와 같은 위치를 가지고 있다고 생각 했습니까? 미안, 나는 새라. –

+0

int는 4 바이트이므로 컴파일러는 액세스하려는 위치에 4를 곱해야합니다 (배열에서 pos 5에 액세스하려면 p 포인터를 가져 와서 액세스하고 5 * 4 = 20을 추가합니다. 아니요, 포인터에는 크기가 없지만 형식 (이 경우 int)에 대한 포인터로 선언되어 있으며 컴파일러가 배열의 각 요소 크기를 알고있는 이유는 무엇입니까? 알 수 있습니다. p를 int * p로 정의했기 때문에 4 바이트; – Floaf

3

를 액세스하는 데 사용할 수있는 방법을 모르겠어요.

int i = 0; 
while (i < 10) 
    { 
    cout << p[i]; 
    i += 1; 
    } 

포인터와 배열은 같은 방식으로 작동합니다. 배열은 할당 한 첫 번째 요소에 대한 포인터 이외의 것입니다. THR 선언 배열과 포인터 제외

2

는의 제 1 메모리 위치

+0

설명해 주시겠습니까 ... – tiridactil

+0

@tiradactil 빠르게 편집하거나 게시물을 잘못 읽었습니까? –

+0

나는 편집했지만 똑같은 말을했다고 생각했습니다. – tiridactil

1

제 1 엘리먼트 포인트 (그들은 여전히 ​​다르게 처리 될 필요가 의미 그들이 메모리 다르다) 동일한 구문 을 이용하여 사용할 수 콘 배열의 요소 그래서이 : 같은 위치에

myArray[0]; 

myArray; 

점. 배열을 채우는 것처럼 포인터에 인덱스를 사용할 수 있습니다. 그래서 :

다른 요소에 액세스 할 수 있습니다. for 루프를 사용하여 배열에있는 모든 요소에 액세스 할 수 있습니다. 처음에 배열에 채우는 것처럼 말입니다. 이 같은

2

사용은

int *p; 
p = myArray; 
for(int i=0;i<10;i++) 
{ 
    cout<<*(p+i); 
} 
1

배열의 이름을 첫 번째 요소에 대한 포인터로 생각할 수 있습니다. 따라서 p = myArray; 행은 myArray 배열의 첫 번째 요소 주소를 p에 복사하는 것입니다.

이제 cout<<*p; 행은 배열의 첫 번째 요소 인 p이 가리키는 값을 분명히 표시합니다.

모든 요소를 ​​표시하려면 이전과 같이 for 루프를 사용하면됩니다.

관련 문제