본문 바로가기

VEDA 복습

VEDA 3일차 - C 프로그래밍

반응형

 

포인터를 이해하는 데 중요함.

type identifier; //선언
type identifier = value; //정의

type = 변수형(float, char, etc)
identifier = {이름, 'a-z', 'A-Z' , '_', 숫자(단 숫자 시작은 안됨)}

포인터

프로세서가 주변 장치에 접근할 때 adress bus, data bus, control bus를 이용한다. 

  • & : 어떤 변수의 주소값을 반환해주는 연산자, promote operator, 차원을 높인다.
  • * : pointer definition operator, promote 연산자(초기 정의할 때, 변수가 포인터 변수다), demote 연산자(변수에 저장된 주소의 값을 참조한다.), 차원을 높이거나 낮춘다.

포인터 변수는 변수로써 주소를 저장하는 것이다. &연산자를 이용하여 주소값을 반환하는 것과는 다르다.

 

  • [] : 헤드에서 사용될 때(배열 지정 연산자), 포인터가 사용된다.
  • a[n] : 원칙적으로 사용자가 지정한 만큼 스택에 데이터가 할당된다, 그러나 a가 가리키는 것은 데이터가 아닌 주소이다. (특이점), a와 &a는 서로 같은 값을 가지나 다르다.(차원이 다르다) a는 변수가 아닌 상수이다.

distance operation과 distance operation

  • 주소와 주소는 더할 수 없다.
  • address - address는 계산할 수 있고, step 단위(변수가 몇 개 들어갈 수 있는가?)이다.
  • 주소와 수(step)는 더할 수 있으며, 단순하게 더한 값이 나오는 것이 아니라 ( 더한 값 * 자료형 바이트수 )를 더한 값이 나온다.  -> ex) stepof(int*) == 4 (stepof(T) == sizeof(*T))
  • 변수 : sizeof()
  • 포인터(변수의 일종) : sizeof(), stepof()
  • 어레이(constant point + 축을 가짐) : sizeof(), stepof(), axisof()

point-array equivalent : a[N] == *(a + N)

a[N] == *(a + N) == *(N + a) == N[a]

 

const의 위치에 따라서 의미가 달라진다.

  • const type* name : *name이 const가 된다는 뜻이고 간접 참조로 값을 바꾸지 못하게 한다는 뜻
  • type * const name : name이 const가 된다는 뜻이고 값인 주소를 바꾸지 못한다는 뜻 - 배열에 해당
  • 그래서 둘 모두를 막으려면 const type* const name을 쓴다.

*** 중요 ***

  • int *x[N] : 배열 연산자는 포인터 연산자보다 우선 순위가 높으므로 x는 int * 를 저장하는 length N의 배열이다.
  • -> int*[N] x
  • int (*x)[N] : 강제로 포인터를 우선으로 하므로 x는 Length가 N이고 int를 저장하는 배열을 참조하는 포인터이다.
  • => (int[N])* x

배열과 포인터의 관계

*** type X[N] ***

X vs &X : X는 일차원, &X는 이차원, 배열의 특성상 값은 똑같으나 엄연히 다르다.

ex) X = 100, X+1 == 100 + type, but &X + 1 == 100 + type*N

 

***배열과 포인터는 엄연히 다르다. ex) sizeof(ARR) != sizeof(P = ARR)***

 

문자

컴퓨터는 문자를 모른다. ASCII 코드로 대응되는 수에 대해서 문자로 출력할 뿐이다.

A = 65 ~ Z = 96

a = 97 ~ z = 128

대문자, 소문자의 차이는 5번째 비트의 차이다.

 

입력과 출력의 가장 기본이 되는 함수는 fgetc(stdin), fputc(ch, stdout)이다.

 

알아두면 좋은 문자열 관련 함수

  • strcpy(to, from)
  • strcat
  • strlen
  • strcmp(s1, s2)
반응형

'VEDA 복습' 카테고리의 다른 글

VEDA 4일차 - C 프로그래밍  (0) 2025.03.20
VEDA 2일차 - C 프로그래밍  (0) 2025.03.18
VEDA 1 일차 : C 프로그래밍  (0) 2025.03.17