프로그래밍/C언어

포인터사용시 주의점(C언어)

콘파냐 2013. 5. 19. 13:03
반응형

포인터는 변수를 가르키는 변수다.

 

 int*a;

----------
 *a=3;
 printf("%d", *a);

이런식으로 사용하게되면 3을 담는 변수가 없기때문에 에러가난다.

참고 : 컴파일러에따라선 위 코드가 에러가 안날 수 있다.

그럼 같은식으로 int *b; int *c;를 선언하여 코드를 추가해보면 에러가 날 것이다.

 

사용법은 존재하는 변수의 주소값을 입력하는 형태로 사용한다.

int b;
a=&b;

------------ 위에 추가해준다.

 

 

 

char* src = "abcde"; // 이것은 src[6] 의 배열이 만들어진것과 같다.

 

char* a;  이경우는 불완전한 선언이다. 포인터 a 가 가르키는 변수가없기때문에 값만 입력한다면 에러를 발생시킬것이다. 그래서 위와같이 "abcde" 로 값을 대입하면 배열변수가 만들어져서 완전하게 해주는 것이다.

만약 동적으로 메모리를 할당할시에 a포인터가 가르키는 변수가 없기때문에 동적할당시 자동으로 그런효과를 만들어준다.

현재 C++에선(!deprecated conversion)에러가납니다. 구식표현이므로 현재 사용안되거나 막힌표현이란뜻입니다.

C++컴파일러에선 string타입을 사용하세요.

 

포인터 이중포인터 3중 .....등등

이 포인터값들이 유기적으로 사용되기위해선 주소값들이 변화되어선 안된다.(예로는 함수의 인자로 포인터를 전달하는 경우)

주소값이 변경되면 참조값이 변화하게된다.

 

 

char* a;

이 표현은 불완전한 표현이다. 동적할당을 해주라는 의미이다.!!!

내부를 살펴보면 이렇다 a포인터 변수는 스택에 존재한다. 스택에 존재하는 변수에 문자열을 넣는 것은 가능하지만 곧바로 에러가 생길수밖에없다.

포인터는 가르킬수있는 변수가 있어야 포인터를 통해서 값을 출력할 수가있다.

변수가 없는 상황에서는 입력을 해도 값만 있고 변수가없기때문에 포인터변수의 기능을 할수가없다.

값만 있는 값을 가르킬 수 있는 주소가 어디있겠는가.

그래서 문자를 다룰때는 더욱 주의를 요하게된다.

char* a;

a라는 포인터변수는 문자열을 다룰 수 있다. 하지만 불완전한 상태이다. 가르킬수 있는 변수가없기때문이다. 변수도 배열변수가 존재해야한다.

우리는 한가지선택뿐이다. a포인터에대해서 동적인 메모리할당과 동시에 문자열의 크기를 설정해줘야한다.  설정을 해준후 for문으로 원하는 문자를 하나씩 넣어주면 된다.

반응형