#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p, n, i;
printf("Enter the size of the array:");
scanf("%d", &n);
p = (int *)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
{
printf("\n Enter element %d:", i + 1);
scanf("%d", &p[i]);
}
for (i = 0; i < n; i++)
printf("\n %d", p[i]);
return 0;
}
&
을 scanf에 쓰는 이유는 무엇입니까? 배열 인 경우 필요하지 않습니다. p
은 모든 메모리 공간을 가리키는 포인터이므로 &p[i]
은 포인터의 주소를 지정해야하지만 데이터를 저장하려는 위치는 지정하지 않아야합니다. 또한 *p[i]
을 printf
에 쓰면 오류가 발생하므로 p
을 포인터로 사용하여 메모리를 예약하고 메모리의 예약 된 공간에 데이터를 저장해야하지만 작동하지 않습니다. 위의 프로그램을 그대로 컴파일해도 3 개의 값을 입력으로 사용하면 작동을 멈 춥니 다. 값이 p[i]
C 메모리 할당 (malloc)
p[i] = *(p+i)
경우
[malloc의 결과를 캐스팅하지 마십시오] (http://stackoverflow.com/q/605845/296974). – glglgl
프로그램에 제공하는 정확한 입력은 무엇입니까? 당신이 얻고있는 정확한 결과는 무엇입니까? –
"p는 포인터이므로 우리는 그것을 고쳐야한다":'* (p + i) '와 같은'p [i]'를 사용하여 그렇게한다. – glglgl