방금 C를 공부하기 시작했고 포인터를 함수의 매개 변수로 포인터에 전달하는 예제를 수행 할 때 문제를 발견했습니다.
이것은 내 샘플 코드입니다.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int* allocateIntArray(int* ptr, int size){
if (ptr != NULL){
for (int i = 0; i < size; i++){
ptr[i] = i;
}
}
return ptr;
}
void increasePointer(int** ptr){
if (ptr != NULL){
*ptr += 1; /* <----------------------------- This is line 16 */
}
}
int main()
{
int* p1 = (int*)malloc(sizeof(int)* 10);
allocateIntArray(p1, 10);
for (int i = 0; i < 10; i++){
printf("%d\n", p1[i]);
}
increasePointer(&p1);
printf("%d\n", *p1);
p1--;
free(p1);
fgets(string, sizeof(string), stdin);
return 0;
}
16 행 *ptr+=1
에서 *ptr++
. 예상되는 결과는 전체 배열과 숫자 1이어야하지만 내가 사용할 *ptr++
때 결과는 0입니다.
+=1
과 사이에 차이 가 ++
있습니까? 둘 다 똑같다고 생각했습니다.
allocateIntArray
것처럼 보이기 때문에 잘못된 이름 malloc
이지만 그렇지 않습니다. fillIntArray
대신 제안 합니다. 2) 반환 값을 사용하지 않습니다 allocateIntArray
. 반환 유형을로 변경하는 것이 좋습니다 void
. 3) 안 if (ptr != NULL)
기능의 increasePointer
수 if (*ptr != NULL)
? 4) 캐스트 인 malloc
은 불필요합니다. 위의 Sourav의 의견을 참조하십시오. 5)이 : for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }
와 printf("%d\n", *p1); p1--;
요구를 묶어야합니다 if(p1 != NULL)
. 6) string.h
미사용입니다.
p+=1
같지 ++p
않습니다.p++
string
.