2012-04-01 4 views
0

포인터에 100 개의 double 배열을 동적으로 할당하고 1.0에서 100.0 사이의 값으로 메모리를 초기화하는 코드가 있습니다.배열 포인터를 값에 할당하는 동안 배열 포인터를 증가시킬 필요가 없습니다

제 질문은 아래 코드에서 for 루프를 반복 할 때마다 * ptr ++을 써야하는 이유는 무엇입니까? 나는 그것을 시도하고 그것이 작동하지 않습니다.

void allocate_array(){ 
    double *ptr; 
    ptr= (double*)malloc(sizeof(double)*100); 
    int i=0; 
    float j=0.0; 
    for(i=0;i<100;i++){ 
     *ptr=j++; 
     printf(" %0.1lf\n",*ptr); 
    } 
} 
+0

필요하지 않습니까? '0.0, 1.0, ... '값을 모두 배열의 첫 번째 인덱스에 할당합니다. 그리고 당신은 다른 지표에 어떤 것도 할당하지 않습니다. 그래서 당신은 정말로 원하는 모든 값을 출력하지만 배열은 다음과 같이 보일 것입니다 : {99.0, ???, ???, ...} – Imp

+0

try ptr [i] = j ++; – RolandXu

답변

3

글쎄, 아무 것도 할 필요가 없습니다. 코드에서 전체 배열을 초기화하지 않습니다. 첫 번째 멤버에 100 개의 다른 값을 할당하면됩니다. 코드는 같은 단지입니다 :

double d; 
for(i=0;i<100;i++){ 
      d=j++; 
      printf(" %0.1lf\n",d); 
} 

하면, 전체 배열을 초기화 같은 것을하고 싶은 경우는 메모리 당신에게 포인터를 반환하지 않기 때문에,이 문제의

double *temp=ptr; 
for(i=0;i<100;i++){ 
      *temp=j++; 
      printf(" %0.1lf\n",*temp++); 
} 
+2

또는'temp [i] ','* temp ++'보다 약간 더 읽기 쉽다. – Mat

+0

@Mat 네,하지만 OP는'* ptr ++ '를 요구했습니다. (그 이유는 내가'printf'에 쓴 이유이기도합니다.) – asaelr

+0

하지만 무언가를 할당 할 때마다 반복적이지 않습니다. 왜 temp * = j ++가 아닌가? –

1

없음을 할당 된; 너 기억 만 누출하고있어. 이 같은

시도 뭔가 :

double *allocate_array(size_t size) 
{ 
    double *ptr = malloc(sizeof *ptr * size); // note no cast, operand of sizeof 
    if (ptr) 
    { 
    size_t i; 
    for (i = 0; i < size; i++) 
    { 
     ptr[i] = (double) (i+1); // ptr[0] = 1.0, ptr[1] = 2.0, ptr[2] = 3.0, etc. 
    } 
    } 
    return ptr; 
} 

하고 당신이 배열을 완료

double *myArray = allocate_array(100); 

과 같이 호출 것, 당신은 그것을 할당을 해제해야합니다

free(myArray); 

한 가지가 이 아니며은로하고 싶습니다.은 ptr의 값을 변경합니다. 적어도 다른 값을 저장하지 않고는 그렇지 않습니다. 그렇지 않으면 free을 올바르게 처리 할 수 ​​없습니다.

관련 문제