내 잡다한 노트

C언어) 입력, 배열, 문자열 본문

Language/C언어

C언어) 입력, 배열, 문자열

peanutwalnut 2023. 3. 8. 11:40

<입력>

scanf ( "입력받을 문자의 서식", 변수의 주소);

변수 앞에 &를 붙이게 되면 이는 해당 변수의 주소를 가리키게 된다.

입력할때 일반 변수들에는 &을 붙여서 주소를 보내도록 하고 (call by reference), 배열의 이름과 

같이 &를 붙이지 않아도 주소를 가리키는 것들은 &을 떼고 인자로 넣어주면 된다.

그리고 scanf는 #define _CRT_SECURE_NO_WARNINGS 을 상단에 입력해야 보안경고가 안뜬다

그래서 scanf_s를 사용하도록 하자.

 

<자료형의 확장>

정수와 실수를 함께 연산하면 결과값은 실수로 나온다. 왜냐하면 실수가 정수보다 표현

범위가 넓기 때문이다. 즉, 표현 범위가 넓은 쪽으로 자동 변환된다.

 

<논리 연산자>

&& = and

|| = or

! = not

 

<불 자료형>

stdbool.h 헤더파일을 입력하면 다른 언어처럼 true와 false를 사용할 수 있다.

 

<포인터>

포인터는 주소를 가리킨다. 이름만 포인터일뿐 변수와 같다.

포인터 변수를 선언할대는 담고자 하는 자료형에 *를 붙여서 선언한다.

예를 들어, int *p = NULL; 포인터를 초기화할대는 NULL로 해줘야한다.

TMI ) 변수를 초기화하지 않았을때의 초기값은 쓰레기값이 들어간다.

메모리 주소를 출력하고 싶을때는 서식 지정자 %p를 사용한다.

메모리 사용 패턴 : malloc -> 사용 -> free

 

<배열>

배열은 크기를 지정해서 생성해야 한다.

ex) int arr3[5] = {5, 10}; // 0번째 인덱스의 값을 5, 1번째 인덱스의 값을 10 나머지는 모두 0으로 초기화

만약 초기화하지 않는다면 대부분 쓰레기값이 나오게 된다.

배열은 선언한 크기만큼 주소가 연속적으로 연결되어 있다.  즉, 연속된 각 원소끼리의 주소는

자료형의 크기만큼 차이가 난다.

배열의 크기를 구하는 방법은 sizeof를 활용한다.

sizeof(arr) / sizeof(arr[0]) 을 한다면 배열의 길이도 구할 수 있다.

 

<문자열>

char의 배열로 문자열을 만들 수 있다.

문자열로 만들었다면 서식 지정자는 %s가 된다.

문자열의 마지막 남는 자리에 0, NULL, \0의 값을 넣어준다 이것들은 전부 같은 것으로 종료 문자를

가르킨다.

주의할 점이 있는데, 문자열에 값을 대입하고 싶다면 선언할 때 바로 값을 넣어줘야한다.

선언 이후에 값을 대입하려하면 오류가 나는데, 선언을 한 이후에 값을 대입하고 싶다면

ch[0] = 'a';, ch[1] = 'b';와 같이 하나하나 저장해야한다.

입력을 받는다면 문자열 선언 이후에 해도 상관없다. scanf를 사용할때 &를 붙여주었었다.

하지만 배열의 경우엔 &를 쓰지 않고 변수의 이름만 써도 된다.

그 이유는 배열의 이름에 주소를 담고있기 때문이다.

문자열 길이 구하기 함수는 string.h 파일