상수와 기본 자료형과 그외 등등등 Programming Language/C언어 공부 기록 2017. 11. 21. 23:39
꾸준히 C를 공부해 보겠다 !!
근데 꾸준히라는 말이 제일 어려운것같다..ㅠㅠ
지금 보고 있는 책은 알고리즘이 보이는 그림책인데
그림으로 쉽게 나와있어서 개념부분을 간단간단 확인할 수 있어서 참고하는 중이다.
캐스트 연산자
'(int)'와 같이 형 이름을 괄호() 로 둘러싼 것을 값이나 변수 앞에 쓰면
그 변수를 특정형으로 변환할 수 있다.
이런 조작을 형 캐스트라고 한다. 괄호 ()를 캐스트 연사자라고 한다.
형을 특정형으로 바꾸는거를 형 캐스트라고 하는것이고 그때 괄호 ()를 캐스트 연산자라고 하는거다.
배열
동일한 형으로 된 변수들을 하나로 묶은 것을 배열이라고 함
배열은 여러 개의 동일한 형으로 된 변수를 하나로 묶은거다
배열 선언은
int a[4]; 이런식으로 하는데 여기서 int는 형을 말하고 a는 배열명 4는 배열의 크기(요소의 수 ) 를 말한다.
여기서 첨자와 요소에 대해 알아야 하는데
첨자--> 0부터 시작하는 배열의 인덱스 번호를 만든다
요소-->하나하나의 상자를 a[0],a[1],a[2],a[3]로 나타낸다
==> 첨자는 0부터 시작하기 때문에 요소 개수보다 하나 작은 값이 된다.
그래서 int a[4];를 실행하면 배열의 크기가 4인 a라는 이름의 int형 배열을 만들어~ 하고 4개의 공간을 만드는데
인덱스 번호가 0부터 시작해서
4개의 방 이름이 a[1] a[2] a[3] a[4] 가 아니라
a[0] a[1] a[2] a[3]로 시작한다.
첨자에 '0' ~ '요소 개수-1' 이외의 값을 지정하면 실행시 오류가 발생하므로 주의해야한다.
---------------------------------------------------------------------------------------------
포인터 변수에 대해 정리해보기!
데이터가 있는 장소를 기억하는 놈이 포인터 변수다
변수 등이 저장되어 있는 위치(주소)를 값으로 값으로 가지는 변수를 포인터 변수라고 한다.
포인터 변수에도 형이 구별되어 있다.
책에 나와있는 예시를 보자
char형의 포인터 변수p를 사용하려면.. 일단 선언해줘야겠지?
1.포인터 변수 p의 선언
char *p; 또는 char* p;
모두 같은 뜻이다
2. 포인터 변수 p에 변수 a의 주소를 대입
char a;
char *p;
p = &a; -->여기서 &a는 변수 a의 주소를 의미한다.
3.포인터 변수 p가 가리키는 변수 a의 값을 참조
포인터 변수명 앞에 *를 붙이면 그 포인터 변수가 가리키는 곳의 데이터를 참조할 수 있다.
char a = 3;
char *p;
p = &a;
여기서 예를 들어서
char b = *p;라고 한다면
char b 안에 포인터 변수 p가 가리키는 변수a의 값이 들어간다고 생각하면 된다.
왜????? p =&a; 라는건 포인터 변수 p에 변수 a의 주소를 대입한거라
포인터 변수 p를 사용하여 변수 a의 값을 변수 b에 대입한거라고 보면 된다 .
<포인터와 배열>
배열의 이름 자체에는 배열의 첫 번째 요소를 가리키는 포인터 역할을 한다.
그래서 &(주소를 구하는 기호)를 사용할 필요가 없다.
int a[4]; 에서 a는 a[0]에 대한 포인터로 사용할 수 있다.
이거 꼭 기억해 두기 !!
<포인터를 사용한 배열의 참조>
예를 들어서 int a[4];를 선언했다고 하자.
int a[4] = {10, 20, 30, 40};
10 |
20 |
30 |
40 |
a[0] a[1] a[2] a[3]
여기서 배열 a[]가 있을때 a자체는 --> a[0]에 대한 포인터 이므로 => *a는 a가 저장되어 있는 장소의 값 a[0]이 된다.!!
그래서... a[1]을 *(a+1), a[2]는 *(a+2)라고 쓸 수 있다.
==> 위에 배열 예시를 들면 *(a+3)은 40이다..
*a+3은 13이다.
<문자와 문자열>
프로그램상에서 문자표현에는 작은 따옴표가 사용된다.
문자열은 ""로 둘러싼다.
고정 문자열은 이런 구조로 되어있다
"Hello"
' H ' |
' e ' |
' l ' |
' l ' |
' o ' |
' \0 ' |
\0은 문자열이 여기서 끝난다는 것을 나타낸다. 화면에는 표시안됨 \0을 한 문자로 취급함
\0이 NULL문자를 의미하는 기능을 가짐
문자열을 저장하는 변수를 준비하려면 다음과 같이 선언한다.
char s[6];
변수s에 문자열의 길이에 null문자 하나를 더한 수 이상으로 지정한다.
문자열을 초기화하려면 다음과 같이 한다 .
char s[6]= "Hello";
[]안을 생략하면 문자수+1 (6개)만큼의 상자가 자동으로 만들어집니다.
char s[] = "Hello";
문자열 변수에 값을 넣을때 =를 사용할 수 있는 경우는 초기화할때뿐임
그외의 경우에 대입할때는 strcpy()함수를 사용한다.
char s[10];
strcpy(s, "Hello");
여기서 s는 위에서 선언한 s[10]의 첫 번째 주소를 가리킨다.
<키보드 입력>
키보드로 입력한 데이터를 변수나 문자열 배열에 저장하는 방법을 알아보는거임
1. scanf() 함수
scanf() 함수는 키보드에서 입력한 데이터를 지정한 서식으로 변환해서 변수나 배열에 저장하는 거임
int a;
scanf("%d", &a);
근데 문자열의 경우에는 배열명은 배열의 첫번째 요소의 주소가 되기 때문에 &을 붙일 필요 없다.
char s[30];
scanf("%s",s);
여러 데이터를 한번에 입력할 수도 있다.(입력 문자는 스페이스로 구분한다.)
그래서 스페이스를 포함하는 문자열은 제대로 읽을 수 없고, 또 입력문자와 지정한 서식이 맞는다는 보장이 없다.
2.gets() 함수
gets()함수는 키보드에서 입력한 한주르이 문자열을 문자 배열로 저장한다.
스페이스도 읽을 수 있다.
char s[30];
gets(s);
3.getchar() 함수
getchar() 함수는 키보드에서 입력한 문자 중 한 문자만 변수에 저장한다.
int c;
c = getchar();
'Programming Language > C언어 공부 기록 ' 카테고리의 다른 글
c언어 함수 (0) | 2017.11.22 |
---|---|
c언어 1~2주차 (0) | 2017.11.22 |