#include <stdio.h>
int main(void)
{
int rank = 2, m = 0;
switch(rank)
{
case 1:
m = 300;
break;
case 2:
m = 200;
break;
case 3:
m = 100;
break;
default:
m = 10;
break;
}
printf("m : %d\n", m);
return 0;
}
while(1)
for (;;)
개인적으로 while문을 작성할 때, 무한루프에 자주 빠지는데 간단한 예제 하나
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
while(i <= 100)
{
if ((i % 3 ) == 0)
{
i++; // 이거 없으면 무한루프!
continue;
}
sum += i;
i++;
}
printf("%d", sum);
}
함수 선언은 컴파일러가 새로 만든 함수를 인식할 수 있도록 알리는 역할을 한다.
그래서, 함수 선언이 없으면 함수 정의는 항상 함수 호출 이전에 있어야 한다.
#include <stdio.h>
int ft_str_is_numeric(char *str);
//prototype
// 이걸 쓰지 않을거라면, ft_str_is_numeric이 상단으로 배치되어야 한다.
int main(void)
{
printf("%d\n", ft_str_is_numeric("asdfasdf"));
printf("%d\n", ft_str_is_numeric("ASDFasdf"));
printf("%d\n", ft_str_is_numeric("ASSDDGBZAQ"));
printf("%d\n", ft_str_is_numeric("asdf1145aa"));
printf("%d\n", ft_str_is_numeric("11aaaaaa11"));
printf("%d\n", ft_str_is_numeric("2745555511"));
printf("%d\n", ft_str_is_numeric(" "));
return 0;
}
int ft_str_is_numeric(char *str)
{
while (*str != '\0')
{
if (!(*str >= '0' && *str <= '9'))
return (0);
str++;
}
return (1);
}
sizeof(배열명) / sizeof(배열 요소)
char형 배열 선언 시 주의할 점
1. 배열의 크기는 최대한 넉넉하게 선언한다.
2. 배열 요소의 개수는 최소한 '문자열 길이 + 1' 이어야 한다 => 끝에 '\0'
#include <stdio.h>
char *ft_strcpy(char dest[], char src[]);
int main(void)
{
char src1[] = "Hello, World!";
char src2[] = "C programming";
char dest1[50]; // 목적지 버퍼는 원본보다 충분히 커야 함
char dest2[50];
// 첫 번째 문자열 복사
ft_strcpy(dest1, src1);
printf("Source: \"%s\"\n", src1);
printf("Destination: \"%s\"\n\n", dest1);
}
char *ft_strcpy(char *dest, char *src)
{
char *origin;
while (*src)
{
*dest = *src;
src++;
dest++;
}
*dest = '\0';
return origin;
}
쓰레기 값이 남아서 함수의 결과를 예상할 수 없다. 그러니 꼭 널 문자 저장!
#include <stdio.h>
void ft_swap(int *a, int *b);
int main(void)
{
int a;
int b;
a = 1;
b = 3;
ft_swap(&a, &b);
printf("a = %d\n", a);
printf("b = %d\n", b);
}
void ft_swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
#include <stdio.h>
int main(void)
{
int a = 10, b = 20;
const int *pa = &a; // 포인터 pa는 변수 a를 가르킨다
printf("변수 a 값: %d\n", *pa); // 포인터를 간접 참조해 a 출력
pa = &b; // 포인터가 변수 b를 가리키게 한다.
printf("변수 b 값: %d\n", *pa); // 포인터를 간접 참조해 b값 출력
pa = &a; // 포인터가 다시 변수 a를 카리킨다.
a = 20; // a를 직접 참조해 값을 바꾼다
printf("변수 a 값:%d\n", *pa); // 포인터로 간접 참조해 바뀐 값 출력
return 0;
}
포인터에 const를 사용하는 대표적인 예는 문자열 상수를 인수로 받는 함수.
-> 값이 바뀌면 안 되므로 매개변수를 통해서 값을 바꿀 수 없도록 매개변수로 선언된 포인터에 const를 사용한다. 12장에 내용이 나올거라고 함.. 🤔
#include <stdio.h>
int main(void)
{
int a = 10;
int *p = &a;
double *pd;
pd = p;
printf("%lf\n", *pd);
return (0);
}
GDB에서는 책과는 조금 다른 아래와 같은 결과 출력
왜 이렇게 나왔나?