C/포인터

포인터 매개변수에 대해

appmaster 2019. 8. 12. 13:06
int main(void) {
	int num; //num변수를 선언한다.
	int* numP = # //*numP의 주소값은 &num의 주소이다.
	printf("숫자 입력 : "); 
	scanf("%d", &num);

	printf(" num : %d\n", num); //scanf해서 받은 num의 값을 출력한다.
	printf("*numP : %d\n\n", *numP); // num의 주소가 나온다.

	printf(" &num : %d\n", &num); // num의 주소가 나온다.
	printf(" numP : %d\n", numP); // numP의 주소가 나온다. 하지만 numP가 num의 주소가 같으므로 똑같은 값이 나온다.

	return 0;
}

 

이것과 

 

void result(int* x) {
	*x = *x * *x;
}

int main(void) {

	int num;

	printf("숫자 입력 : ");
	scanf("%d", &num);

	result(&num);
	printf("제곱 : %d\n", num);

	return 0;
}

 

이것을 보면 공통점이 있다. 입력받은값은 주소로 하는것이고 출력값을 주소값으로 한다는 부분인데.

 

&를 넣으면 주소를 넣는것은 맞고 *는 &의 주소값을 구하는 것이다. 그러므로 값을 직접적으로 &을 넣는다고 해도 출력을 *을 하게된다면 &의 주소값이 출력이되는 것이다. 이부분은 꼭 기억하고 이해하자! 

 

 

void array_copy(int* a, int* b, int size) { // 왜 배열인데 a[]형태가 아닌가??
	int i;


	printf("a배열의 값\n");

	for (i = 0; i < size; i++) {
		printf("%3d", a[i]);
	}

	printf("\nb배열의 값\n");

	for (i = 0; i < size; i++) {
		printf("%3d", a[i]);
	}
}

int main(void) {
	int a[N] = { 5,19,27,21,34 };
	int b[N];
	int j;

	array_copy(&a, &b, N);

	return 0;
}

또한 매개변수에 저렇게 배열의 형태를 넣지않아도 되는 것은 이미 포인터는 주소의값이 있기 때문이다. 그렇기때문에 저 배열의 값 모든 인스턴스를 가지고 있기때문에 따로 또다시 배열의 칸을 만들면 안되는 것이다.

'C > 포인터' 카테고리의 다른 글

포인터 사용시 주의해야할 점  (0) 2019.12.05
함수와 포인터  (0) 2019.12.05
포인터를 더 활용해보기  (0) 2019.08.12