반응형

Computer Language/C 5

const *(포인터) 사용법

간단하게 예문으로 설명하도록 하겠다. int a = 12345; int* const val1 = &a; // 포인터를 상수화. a값 변경 O , 주소 변경 X const int* val2 = &a; // 값을 상수화. a값 변경 X, 주소 변경 O int const* val3 = &a; // 값을 상수화. a값 변경 X, 주소 변경 O const int* const val4 = &a; // 전부 상수화. int const* const val5 = &a; // 전부 상수화. /*결론 * 포인터 (*)를 기준으로 const가 * 포인터 (*) 왼쪽에 붙으면 가리키는 포인터의 값 변경이 불가능 하지만 가리키는 포인터 주소는 변경 가능. * 포인터 (*) 오른쪽에 붙으면 가리키는 포인터의 값 변경이 가능하지만 ..

Computer Language/C 2015.05.08

alloc의 3가지 종류와 2차원 배열 동적할당

-alloc에는 3가지 종류 malloc, calloc, realloc 이 3가지의 alloc은 각각 기능의 장단점과 차이가 분명히 있다. 용도에 맞게 잘 사용하면 보약이고 그렇지 않다면 독약이 된다. 사용 방법을 간혹 잊어버릴 수 있으니 간단히 정리를 해 둘 필요성이 있어 포스팅 한다. 1. 배열의 동적 할당을 위한 malloc 대량의 데이터를 처리할 때 배열은 아주 유용하게 처리 되었다. 하지만 데이터의 특성에 따라 데이터의 길이가 동적인 경우가 있다. 하지만 배열은 한번 선언 하면 배열의 크기는 중간에 바꿀수가 없기 때문에 여유공간을 생각해서 넉넉히 큰 크기의 배열을 선언해서 사용하는 메모리 적으로 비효율적인 점이 있다. 이를 개선 하여 사용 할 수 있도록 해 주는 동적 배열이 있다. 동적배열은 m..

Computer Language/C 2013.12.27

[더블포인터, main 명령행 인자] 포인터의 포인터 그리고 main()의 명령행 인자.

더블포인터 포인터의 포인터는 다루는 대상체가 포인터인 포인터 변수를 뜻한다. ex) char **pptr; 포인터의 포인터 변수도 일종의 변수이므로 초기화가 무엇보다도 중요하다. ex) int one, *two, **three; one = 1; two = &one; three = &two; char = *pstr[3], **ppstr; ppstr = pstr; //배열은 주소값을 의미함으로 &를 붙일 필요 없다. ppstr = &pstr[0] //&를 붙인다면 배열의 첫번째 주소값을 해주면 위와 동일해진다. 여기서 three 는 포인터의 포인터 변수이므로 위와 같이 주소 값을 저장 할 수 있다. 만약 앞에 &를 붙인 &three 이면 포인터의 포인터 변수(three)의 할당된 메모리 주소를 뜻한다. *t..

Computer Language/C 2013.12.21

배열과 포인터배열의 관계

1차원 배열과 포인터 int pt[3]; 과 int *pt; 는 같다고 생각하면 된다. pt[0] = *(pt+0) pt[1] = *(pt+1) pt[2] = *(pr+2) 2차원 배열과 포인터 int pt[3][2]; = int *pt[2]; = int **pt; pt[0][0] = *(*(pt+0)+0) = **pt pt[0][1] = *(*(pt+0)+1) = *(*pt+1) pt[1][0] = *(*(pt+1)+0) = *(*(pt+1)) pt[1][1] = *(*(pt+1)+1) 결론 -> 포인터(포인터+중괄호) 는 대괄호 하나와 같다고 생각하자. *주의 : 포인터 배열을 사용할 땐 항상 주소값을 정해주고 사용하자. ex) 1차원 포인터 배열인경우. int a[3], *pt; pt = a; 2차..

Computer Language/C 2013.12.19

포인터의 기초

포인터란? 포인터는 번지에 대한 기호화된 표현을 말한다. 즉, 포인터는 번지이다. 포인터는 4바이트의 메모리를 할당 받는다. 포인터 변수에는 특정한 문자나 상수 값, 문자열이 들어가는 것이 아니라 바로 번지가 들어가는 것이다. 포인터 변수는 번지 이외에는 어떠한 것도 들어갈 수 없다. int *a = 5; 의 경우 warning이 발생한다. warning 이유 -> initialization makes pointer from integer without a cast [enabled by default] 쓰레기값 주소를 가진 포인터에 값을 넣어서 그런듯 하다. 포인터 변수 정의 #include int main() { //포인터 변수의 정의 int * Pointer; //변수의 type 오른쪽, 변수 이름의..

Computer Language/C 2013.10.23
반응형