배열 확장 소스 관련 질문입니다.
지옥
질문을 아래 주석에 달아 놓았습니다...질문 내용 :
다음은 동적배열에 값을 넣은후
무한루프를 통해 값을 입력받아
기존동적배열의 크기보다 클경우
함수를 통해 기존동적배열을 새로 생성하여 배열의 크기를 초과입력시 3씩 배열크기확장하는
동적배열 소스인데요..
// 아래 궁금한 부분에 주석을 달아놨습니다... @@@@
#includestdio.h
#includestdlib.h
void extendsize(int ** parr, int * psz);
int main(){
int arrsize=5;
int index=0;
int i;
int *arr = (int*)malloc(sizeof(int)*arrsize);
while(1){
printf(number ? : );
scanf(%d, &arr[index]);
if(arr[index] == -1)
break;
if(arrsize == index+1)
extendsize(&arr,&arrsize);
index++;
}
for(i=0;iindex;i++)
printf(%d, , arr[i]);
free(arr);
return 0;
}
void extendsize(int** parr, int* psz){ // 이 부분 보시면 포인터가 **2개 , *1개 이자나요 그런데
int exsize = *psz+3;// ===================[q1] 왜 *표시를 또 붙이는것이며
int *temp = (int*)malloc(sizeof(int)*exsize);
int i;
for(i=0;i*psz;i++)
temp[i]=(*parr)[i]; // [q2] 이건 왜*parr[i] 형태가아닌 (*parr)[i]인거죠???
free(*parr);
*parr = temp; // [q3] 게다가 그렇다 쳐도 parr은 **2개인데 여기는 왜 한개만 붙는거죠???
//[q4] parr도 포인터자나요 , 위에 보면 , 이 함수 인자전달할때는 &parr 이런 형태썼는데
// 왜 &temp형태로 안하고 temp형태로 넣는거죠??
// [q5] 그리고 이부분에서 동적배열선언과 temp배열값을 다시기존배열(parr)에 넣어야되는데
// 어떻게 그냥 temp 만 입력함으로써 형선언과 배열의 모든값을 한번에 다 넘겨줄수있죠???
*psz += 3;
}