본문 바로가기

C언어/예습

[C언어 예습]DAY15_인터배열과 배열포인터, 지역변수, 전역변수, static변수

포인터 배열

 : 포인터가 나열 되어 있는 것

 

     2개 이상의 주소값을 저장할 수 있도록 함(목적)
     값에 접근하기 위해서는 두번 참조해야 한다.

 

 


#include <stdio.h>
#define SIZE 3
//void 함수를 선언해서 40, 50, 60으로 값 바꾸기
//배열 받아오기
void changeValue(int*);
//void changeValue(int*[]);

void main() {
	int num1 = 10, num2 = 20, num3 = 30;
	int* PArNum[3] = { &num1, &num2, &num3 };


	for (int i = 0; i < SIZE; i++) {
		printf("%d ", **(PArNum+i));
	}
	printf("\n");

	changeValue(PArNum);
	//PArNum 자체가 이중포인터이기때문에 **되어 있을때 &PArNum로 받을 필요가 없다.

	for (int i = 0; i < SIZE; i++) {
		printf("%d ", **(PArNum + i));
	}
	printf("\n");
}

	//이중포인터로 받는 경우
	void changeValue(int** PArNum) {
		for (int i = 0; i < SIZE; i++) {
			**(PArNum+i) += 30;
		}

}

	//단일포인터로 받는경우
	//void changeValue(int* PArNum) {
	//	for (int i = 0; i < SIZE; i++) {
	//		*(PArNum [i]) += 30;
	//	}
	//
//}

배열 포인터

 : 배열의 주소를 담는 저장공간

 


#include <stdio.h>
#define SIZE 3

int arNum[SIZE] = { 4, 5, 6 };
void changeAdr(int*);

void main() {
	int arNum[SIZE] = { 1, 3, 5 };

	int(*pNum)[SIZE] = &arNum;
	
	for (int i = 0; i < SIZE; i++) {
		printf("%d ", *(*pNum + i));
	}

	changeAdr(&pNum);
	for (int i = 0; i < SIZE; i++) {
		printf("%d ", *(*pNum + i));
	}
}

void changeAdr(int*arData) {
	*arData = arNum;
}

 



지역변수, 전역변수, static변수

* Data영역은 다른 파일에서도 사용 가능하기 때문에 보안성이 좋지 않다.