2013-04-10 2 views
2

좋아요. 하루 종일 (hw이 아닌)이 기능을 수행하고 있는데, 특히 유용한 코드는 아니지만, 깔끔한 개념입니다 맡은 일. 포인터 체인에 대한 포인터에 대한 포인터가 더 이상 없으므로 끝에 값을 설정하는 가장 좋은 방법을 찾으려고합니다. 예를 들어, 내가 선언포인터 체인에 대한 포인터의 끝에서 값을 초기화합니다.

int *****ptr; 

포인터 세그먼트 각 포인터를 설정하는 가장 좋은 방법은 무엇입니까, 아래 실제 int 값에 모든 방법을?

그것이 내가 사용하는 방식을 좋아하지 않기 때문에이 코드는 컴파일되지 않습니다

및 역 참조 무효 포인터 :

#include <stdio.h> 
#include <stdlib.h> 

#define NUMPOINTERS 5 

int main(int argc, char **argv) 
{ 
    int *****number; 
    *****number = malloc(sizeof(void*)); 
    void *ptr = *number; 

    int i; 

    for(i = 1; i < NUMPOINTERS; i++) 
    { 
     if(i == NUMPOINTERS - 1) 
     { 
      ptr = malloc(sizeof(int)); 
      int *iPtr = (int*)ptr; 
      *iPtr = 900; 
      break; 
     } 

     *ptr = malloc(sizeof(void*)); 
     ptr = **ptr; 
    } 

    printf("%d", *****number); 

    return 0; 

} 

일부 기사가 거기에 있다는 것을 어떻게 포인터와 포인터의 말도 안되는 숫자에 대해 이야기 그들과 함께 일해?

답변

1

당신이 가진 것은 꽤 가깝습니다. 당신은 아마 내부에서 밖으로 일하고 싶다. 다음은 프로그램을 기반으로 한 완전한 예입니다 (댓글 인라인).

#include <stdio.h> 
#include <stdlib.h> 

#define NUMPOINTERS 5 

int main(void) 
{ 
    void *ptr = malloc(sizeof(int)); // allocate space for the integer value 
    *(int *)ptr = 900;    // initialize it 

    // iterate to create the nested pointers 
    for (int i = 1; i < NUMPOINTERS; i++) 
    { 
     void **newptr = malloc(sizeof(void *)); // create a new pointer 
     *newptr = ptr;       // point it at what we have so far 
     ptr = newptr;       // "step out" one level 
    } 

    int *****number = ptr;  // make our 'int *****' pointer 
    printf("%d\n", *****number); // dereference and print the pointed-to value 

    return 0; 
} 
+0

당신은 영웅입니다. 감사합니다! 내가 다른 것을하지 않고 스크린을 응시하는 것 중 하나였습니다. 나는 당신이 프로그램의 9 번째 줄과 같은 과제를 할 수 있다는 것을 몰랐다. –

+1

그것은 C99 기능입니다. –

+0

빠른 질문입니다. 다음과 같은 라인을 넣을 때 : int * pointer = someOtherPtr; 포인터는 포인터에 대한 포인터가 아니기 때문에 someOtherPtr이 가리키고있는 주소를 가져오고 해당 포인터를 가리 키지 않습니다. 그러나 void 포인터는 원하는 것을 가리킬 수 있습니다. 유형이 없습니다. 따라서 '='연산자를 사용하여 void 포인터에 포인터를 할당하면 void 포인터가 포인터 또는 값을 가리킬 수 있기 때문에 컴파일러가 포인터를 가리킬 지 또는 포인터가 가리키는 포인터를 가리키는 지 결정합니다 ? 예 : ptr = newptr; –

관련 문제