분류 전체보기(18)
-
[C] void 포인터
포인터가 전달한 데이터의 자료형을 void로 설정할 수 있다. 이것이 의미하는 것은 어떤 자료형을 받을지 모른다는 것인데, 이때 형변환을 하지 않으면 포인터가 데이터를 받지 못하는 오류가 발생한다. void *p ; *p = 5 ; // 오류 출력 :대상 메모리의 크기가 지정되지 않음. 따라서 형변환 (int *) 등을 적용해줘야하는데 다음과 같은 형태이다. void *p ; *(char *)p = 5; 그렇다면 포인터가 전달할 데이터의 자료형을 void로 두는게 어떤 이득이 있을까? 어떤 자료를 받을지 모를때 유용하게 사용될 것이다. 아래 AssignType 함수는 switch문과 if ~ else if 문을 활용하여 포인터에 자료형을 부여하고 있다. #include int AssignType(void..
2021.01.06 -
[C] 포인터 활용
포인터 활용 예시 (1) 함수내의 지역변수 변경 아래의 경우 main에서 func를 호출하고 매개변수 data에 corn을 대입하였을 경우 cream은 10으로 되겠지만, 그 아래행 corn = 4에서 오류가 발생한다. #include void func(short data) ; void main() { short corn = 10; func(corn); } void func(short data) { short cream = 0 ; cream = data ; corn = 4 ; } 하지만 포인터를 활용한다면 func는 ptr이라는 포인터를 매개변수고 갖고, 이 포인터에는 corn의 메모리 주소가 할당된다. cream = *ptr은 cream에 포인터가 가리키는 데이터를 할당하므로 cream = 10을 의미..
2021.01.06 -
[C] 포인터 개념
포인터? 간접 주소 지정방식을 구현하기 위해 C에는 포인터라는 개념이 있음 포인터는 중간에서 메모리 주소를 할당해주는 기능을함 왜 포인터를 사용해야하나? 포인터는 다른 함수에 선언된 변수라도 메모리 주소를 읽거나 쓰면서 변경할 수 있어지므로 다양한 프로그래밍이 가능해진다. 포인터 사용법 #include int main() { short result; // result 이라는 임의의 변수 선언. short* ptr; // *ptr 로 포인터 변수 생성, 포인터는 무조건 4바이트의 공간을 갖음. //short은 포인터가 받은 데이터의 자료형을 결정함. printf("포인터의 주소는 %p 입니다.\n", &ptr); // 생성된 포인터의 위치를 파악함. ptr변수 앞에 &를 붙여서 자체 위치를 출력. ptr ..
2021.01.06 -
[C] if 조건문
if조건문은 피해라! 컴퓨터는 명령을 순차적으로 수행하는데 if조건문은 실행흐름을 변경하기 때문에 if 조건문 사용을 줄이는게 효율적이다. if조건문을 대신할 수 있는것에는 어떤것들이 있을까? [조건 수식] "변수 var값이 5이면 2를 더한다." 라는 조건 실행을 아래의 두가지 경우로 나눠서 실행할 수 있다. 처리할 데이터양이 더 많아진다면 조건 수식을 활용한 경우의 효율성이 더욱 증가한다. /* if 조건문 활용 */ void main() { shrot var ; if(var ==5){var += 2}; } /*조건 수식 활용*/ void main() { shrot var ; var += 2 * (5 == var); } boolean 을 활용한 조건수식도 있다. && 연산과 || 연산을 활용하여 조건..
2021.01.05 -
[C] 지역변수와 전역변수(+ extern, static, const)
[지역변수] C언어에서 하나의 함수, 즉 {} 안에 선언된 변수를 의미한다. 지역변수는 해당 함수안에서만 유효하다. main 함수 안에 선언된 a 변수가 그 예이다. void main() { int a = 0 ; } - 특징 지역변수는 서로다른 함수들끼리 이름을 중복하여 사용할 수 있다. [전역변수] C언어에서 함수에 선언되지 않고 헤더라인쪽에 선언된 변수를 의미한다. 아래의 변수 a가 그 예이다. #include int a = 0; void main() {....} -특징 전역변수와 동일한 이름으로 지역변수로 재정의한경우 : 이름이 같을때 지역변수가 먼저 처리되므로 var1 + var2 값은 지역변수 result에 저장되고, 전역변수 result에는 어떤 변화도 생기지 않는다. main은 전역변수 re..
2021.01.05 -
[C] 저장공간 할당
저장공간을 알아야하는 이유 정수 3을 저장한다고 하자, 정수 3은 작은 숫자이므로 1바이트면 충분히 저장할 수 있다. 그런데 int(4바이트) 형태의 공간에 정수 3을 저장한다면 나머지 3바이트는 낭비되게 된다. 메모리용량이 점점 증가하는 추세라고는 하지만 이러한 손실이 누적되면 비효율이 발생할 수 밖에 없다. 정수형 자료구조 [signed char] 1바이트(8비트)를 할당하되, 제일 왼쪽 비트는 부호(+/-)를 결정하도록 하는 저장공간 이때 표현할 수 있는 숫자는 양수(0 ~ 127), 음수(-1 ~ -128)로 256개의 숫자이다. ASCII코드에서 문자하나를 1바이트로 취급하기 때문에 문자는 char라고 외우는데, 사실 숫자를 넣어도 문제없다. [unsigned char] 1바이트(8비트)모두가 ..
2021.01.05