C/포인터 4

포인터 사용시 주의해야할 점

1. 초기화 하지않고 사용하기 - 만약 포인터가 선언만 되고 초기화하지 않았다면 포인터는 임의의 주소를 가리키게 된다. 포인터를 초기화시키지 않고 포인터p가 가리키는 곳에 값을 100을 대입하고 있어 위험한 코드이다. 만약 우연히 p가 중요한 영역을 가리키고 있었다면 중요한 정보를 덮어 쓸수도 있으며 따라서 전체 시스템을 다운시킬 수 있다. 2. NULL포인터 사용 포인터가 아무것도 가리키고 있지 않을 때는 NULL(0)로 설정하는 것이 바람직하다. 3. 포인터 자료형과 변수의 자료형은 일치하여야 한다.

C/포인터 2019.12.05

함수와 포인터

데이터를 전부 복사해서 함수로 넘기는 것보다 데이터가 있는 위치를 포인터로 알려주는편이 훨씬 효율적이다. 일반적으로 외부로부터 데이터를 받는 방법에는 2가지가 있다. * 값에 의한 호출(call-by-value) : 함수가 호출될 때 복사본이 함수로 전달되면 값에 의한 호출이다. 함수 안에서 매개변수를 변경하여도 원본에는 영향을 주지않는다. * 참조에 의한 호출(call-by-reference) : 만약 함수가 호출될 때 원본을 함수로 전달하는 방법이다. 함수 안에서 매개변수를 변경하면 원본 변수가 변경된다. C언어에서는 기본적으로 값에 의한 호출만 가능하다. #include void modify(int value){ value = 99; } int main(void){ int number = 1; mo..

C/포인터 2019.12.05

포인터를 더 활용해보기

우리는 포인터를 통해서 저배열안에 있는 인스턴스중에서 55와 22를 출력해야한다. int main(void) { int numArr[5] = { 11, 22, 33,44,55 }; int* numPtra; void* ptr; numPtra = &numArr[2]; ptr = numArr; printf("%d\n",*(numPtra+2)); //numPtra는 numArr의 3번째칸의 주소를 가지고 있으므로, 55을 출력하려면 그 주소에서 +2를 해야한다. printf("%d\n", *((int*)ptr+1)); // ptr은 numArr의 주소를 가지고 있으므로 그리고 몇번째 칸에 있는지 알려면 int로 추적이 가능하니까 일단 먼저 (int*)로 형변환을 한다. // 그리고 22는 2번째칸에 있으므로 0..

C/포인터 2019.08.12

포인터 매개변수에 대해

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) { ..

C/포인터 2019.08.12