2014-12-23 2 views
0

웹 사이트 포인터를 포인터로 사용하면 한 지점에 고정됩니다.포인터 생성 차이 구문

ı 주어진 예제를 쓸 때 ı ptr = arr과 같이 포인터를 증가시키기위한 포인터에 array의 주소를 할당 할 수 있습니다. 그것은 올바르게 작동하지만, ı가 감산 예와 똑같은 일을 할 때 그것은 작동하지 않습니다. 이것은 다음과 같이 씁니다. ptr = & arr [2]. 왜 ı가 감산 예를위한 앰퍼샌드를 써야 하는가? 그 둘의 차이점은 무엇인가?

int main() { int arr[3]={10,20,30}; int *ptr,i; ptr=arr; for(i=0;i<3;i++) { printf("adress of variable arr[%d] %x\n",i+1,ptr); printf("value of arr[%d] = %d\n",i+1,*ptr); ptr++; } return 0; }
당신은 단지 포인터 사용을 작성할 필요가 없습니다

+0

arr [2]가 int 유형이고 C를 사용하여 주소 –

+0

을 얻으려면 &를 적용해야합니다. 배열은 주소가 다음과 같이 저하됩니다. ptr = array. 그러나 배열 [someoffset]은 표시된 오프셋의 실제 내용을 배열에 액세스하려고합니다. 배열에 오프셋의 주소를 얻으려면 코드는 다음 주소를 통해 주소를 가져와야합니다. & array [someoffset] – user3629249

답변

1

차이점은 의 경우 "감소"의 경우 []을 사용합니다. 전체 배열에 대한 참조로 arr을 생각하면 ptr=arr 또는 ptr=&arr과 동일한 결과를 얻는 것이 좋습니다 (컴파일러 현명한). 반면에 arr[3]은 배열에있는 객체에 대한 참조이므로 명시 적으로 주소를 가져와야합니다 (컴파일러 최적화는 필요 없습니다).

2

: 마지막 요소가 +2하지 +3에 있음을

ptr = var + 2 ; 

for(i=0;i<3;i++) 
{ 
    printf("%d" , *ptr) ; 
    ptr-- ; 

참고. 똑같은에 int arr[3], &arr[0]arr 점인 경우

+0

죄송합니다 ı 설명에 코드를 잘못 쓰 셨습니다. ı 정정되었습니다. – Niyo

2

베이스 어드레스 어레이 또는 어레이의 첫 번째 요소의 주소. 따라서 증분이 인 경우 ptr = var을 쓸 수 있습니다. 이는 시작 주소를 별도의 포인터에 저장하는 것일뿐입니다.

는 감소율의 경우, 끝 배열 요소 주소 직접을 가리킬 수 어디에도 없다. 따라서 마지막 요소의 주소를 나타내려면 의 마지막 요소 주소 [&arr[n-1], n 크기]를 사용해야합니다.