CTRL + F 로 키워드 검색
본 글은 필자가 C언어를 공부하면서 쓰는 일종의 저장 노트입니다.
필자도 배우는 입장으로
필요하신 분 들은 적절히 사용하면 좋을 듯 하다.
이전 편
2023.04.11 - [소프트웨어 | Software/프로그래밍 | C언어 | C] - 내가 보려고 만드는 C언어 정보 모음 #기본
비주기적 업데이트 예정
마지막 업데이트 2023 05 03 끝
● 1차원 배열
※ 배열의 길이 정보는 상수로 해주는 것이 좋다.
허나 최근에는 상수가 아닌 변수 선언도 허용하나 범용적으로 상수 선언을 권장한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int arr1[7]; // 상수로 지정
int len = 20;
int arr2[len]; // 변수로 지정
return 0;
}
※ char 형의 배열을 선언시 문자열 저장만 아니라 변경도 가능하다.
※ char형 배열을 선언시 문자열 끝에 "\0"라는 escape sequence(이스케이프 문자)가 있다는걸 명심해야한다.
다른말로 "\0"을 null 이라고도 한다.
ex: int char[] = "Good" 이라고 선언하면 실제로는 G,o,o,d,\0 이렇게 구성 되어 있다.아스키 코드 값으로 0인 \0 이다.
※ scanf 로 문자열을 입력 받을때는 %s 를 사용.
다만 문자열을 입력받는 배열의 경우는 배열 앞에 & 연산자를 사용 하면 안된다.
※ C언어에서 표현하는 모든 문자열 끝에는 널(\0) 문자가 자동으로 삽입된다.
※ 문자열 좌우 반전 C언어 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char arr[100];
int i,lens=0;
char temp;
printf("영어 단어 입력 하세연");
scanf("%s", arr);
while (arr[lens] != '\0')
lens++;
for (i = 0; i < lens/2; i++)
{
temp = arr[i];
arr[i] = arr[(lens-i)-1];
arr[(lens - i) - 1] = temp;
}
printf("좌우반전 문자열 : %s \n", arr);
return 0;
}
● 포인터
※ C언어에서 변수는 메모리상에 존재한다. 이 메모리에는 각각의 주소가 있다.
※ 포인터 변수 : 메모리 주소 값을 저장하기 위한 변수
32비트 시스템에서 그 크기는 4바이트 , 64비트 시스템에선 8바이트
※ 포인터 변수 선언시 '*'의 위치는 상관 X
※ 포인터 변수 선언 예시 : int * pointer_1;
※ 포인터의 형에 주의하라 int형 포인터 변수를 선언 해놓고 double형 변수 메모리 주소값을 주면 아무짝이 쓸모 없다.
※ 포인터 선언시 초기화는 필수다. 0이나 NULL로 초기화 하자.
● 포인터와 배열
※ 배열의 이름은 포인터이다.
※ 포인터와 배열의 차이점을 들어가자.
ㄴ포인터 변수는 주소 값 변경이 가능하나 배열의 이름은 불가능 하다.
※ int * pointer = &arr[0] 이 문장은
int * pointer = arr 과 같다.
※ Type형 포인터를 대상으로 n만큼 값을 증감시 n x (Type의 크기) 만큼 주소 값이 증감 한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int array[3] = { 10,20,30 };
int* pointer = array;
printf("%d %d %d \n", *pointer, *(pointer + 1), *(pointer + 2));
printf("%d ", *pointer); pointer++;
printf("%d ", *pointer); pointer++;
printf("%d ", *pointer); pointer--;
printf("%d ", *pointer); pointer--;
printf("%d ", *pointer); printf("\n");
return 0;
}
※ arr[i] == *(arr+i) 결론
※ char string[ ] = "QWERTY" 변수 형태의 문자열
문자열 전체를 저장
※ char * string_2 = " POWER " 상수 형태의 문자열
문자열 P의 주소 반환
※ 배열에 있는 값을 포인터 접근법으로 위치를 바꾸는 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int arr[6] = { 1,2,3,4,5,6 };
int* ptr = &arr[0];
int* ptr_last = &arr[5];
int temp = 0;
for (int i = 0; i < 3; i++)
{
temp = *ptr;
*ptr = *ptr_last;
*ptr_last = temp;
ptr++, ptr_last--;
}
for (int k = 0; k < 6; k++)
printf("%d ", arr[k]);
return 0;
}
● 함수 인자 전달 #배열
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void Func(int number)
{
printf("%d \n", ++number);
}
int main(void)
{
int k = 1;
Func(k);
return 0;
}
※ Func 함수에 k 자체가 아닌 k에 저장된 값을 전달
※ 여기서 k는 인자 number은 매개변수다.
※ 배열을 인자로 전달하는 법
void Func(int * any) { ..........}혹은void Func(int any[ ] ) {.....} 형태도 가능하다.후자가 좀 더 많이 쓰인다.
※ Call by value //// Call by reference
※ 위 표현은 필자가 대학교 1학년때 다니면서 C언어 전공 수업때 들은 표현이었는데
처음엔 사실 그냥 무시하고 흘려 들었다. (하지만 지금 다시 배울려고 한다.)
※ Call by Value : 값을 전달하는 형태
※ Call by reference : 배열,주소값을 전달하는 형태
※ scanf 함수 사용시 &기호의 의미가 이제 뭔지 알 것이다.
바로 주소 값을 나타내는것이다.
다만 문자열을 입력받는
scanf(" %s " , string );
위의 형태는 왜 &를 붙이지 않을까
답은 이미 배웠다. 문자열 자체가 배열의 첫 번째 위치를 나타내는 주소 값이기 때문이다.
※ 포인터 변수 const 관계
int * const pointer = &input;
pointer는 상수가 되어서 주소 값이 한 번 저장되면 그 이후로 값을 못 바꿈
'소프트웨어 | Software > 프로그래밍 | C언어 | C' 카테고리의 다른 글
윤성우 열혈 C 프로그래밍 도전! 프로그래밍 3 답 (0) | 2023.05.22 |
---|---|
내가 보려고 만드는 C언어 정보 모음(심화) #배열 #포인터 (0) | 2023.05.10 |
윤성우 열혈 C 프로그래밍 도전! 프로그래밍 2 답 (0) | 2023.05.03 |
윤성우 열혈 C 프로그래밍 도전! 프로그래밍 1 답 (0) | 2023.04.20 |
내가 보려고 만드는 C언어 정보 모음 #기본 (0) | 2023.04.11 |