<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hyen________</title>
        <link>https://velog.io/</link>
        <description>순수청년</description>
        <lastBuildDate>Wed, 21 Feb 2024 07:17:36 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hyen________</title>
            <url>https://velog.velcdn.com/images/hyen________/profile/06491476-48ee-4046-9833-3b62eb001621/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hyen________. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hyen________" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[C, C++] 정적변수 / 외부변수]]></title>
            <link>https://velog.io/@hyen________/C-C-%EC%A0%95%EC%A0%81%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@hyen________/C-C-%EC%A0%95%EC%A0%81%EB%B3%80%EC%88%98</guid>
            <pubDate>Wed, 21 Feb 2024 07:17:36 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-정적변수">◾ 정적변수</h1>
</blockquote>
<ul>
<li>정적변수는 static 만 붙여주면 됩니다.</li>
<li>정적 지역 변수의 저장공간은 프로그램이 실행되는 동안 계속 유지된다.</li>
<li>프로세스의 데이터 메모리 영역에 생성되어 그 이후엔 프로그램이 종료 될 때까지 유지가 된다.</li>
<li>static 은 선언되는 위치에 따라 전역 변수와, 로컬 변수로 나뉘는데 
함수 밖에 선언된 변수는 전역 변수이며, 
함수 안에 사용된 변수는 로컬 변수라고 한다.</li>
</ul>
<pre><code>    정적변수 특징
    static (정적) : 움직이지 않는다.
    선언된 공간에만 있는다.  
    데이터 영역을 사용함
    그 함수 안에서만 사용이 가능하다.</code></pre><pre><code>    외부변수 특징
    extern
    모든 위치에서 사용 가능한 변수
    사용법 : 외부변수 만들고 어느 파일이든 외부변수를 선언해서 실체를 만들어줘야한다.
    만들 때 : extern int i;
    실체 만들 때 : int i = 0;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 구조체]]></title>
            <link>https://velog.io/@hyen________/C-C-%EA%B5%AC%EC%A1%B0%EC%B2%B4</link>
            <guid>https://velog.io/@hyen________/C-C-%EA%B5%AC%EC%A1%B0%EC%B2%B4</guid>
            <pubDate>Tue, 20 Feb 2024 13:55:27 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-구조체">◾ 구조체</h1>
</blockquote>
<ul>
<li>다양한 자료형을 하나로 묶을 수 있는 복합 자료형으로 다양한 형태의 데이터를 처리할 때 사용된다.</li>
<li>즉 사용자가 만드는 자료형이다.</li>
<li>구조체를 사용하려면 선언을 해야한다. (struct)</li>
</ul>
<pre><code>#include &lt;stdio.h&gt;

struct student     // 구조체 선언
{
    int num;            // int 에 저장
    double grade;       // double 에 저장
};

int main()
{    
    struct student s1;                  // struct student 형의 변수 선언, s1 에 집어넣기

    s1.num = 2;                         // s1 의 num 멤버에 2 저장
    s1.grade = 2.7;                    // s1 의 grade 멤버에 2.7 저장

    printf(&quot;학번 : %d\n&quot;, s1.num);      // num 멤버 출력
    printf(&quot;학점 : %.1f\n&quot;, s1.grade);  // grede 멤버 출력

    return 0;
}</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/d168ec1f-6fb5-47f7-947b-0d4aabf95148/image.png" alt=""></p>
<ul>
<li>구조체를 선언하게 되면 위와 같이 main 함수에서 s1. 만 눌러도 목록이 나오게된다.</li>
<li>구조체 변수가 사용할 멤버에 접근할 때 멤버 접근 연산자인 ( . ) 을 사용해야한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/hyen________/post/00ecc52e-c359-47d9-b3af-276d99d124e8/image.png" alt=""></p>
<h4 id="❗-구조체-선언이-main-함수-앞에-있으면-프로그램-전체에서-사용할-수-있고-함수-안에-선언하면-그-함수-안에서만-사용이-가능하다">❗ 구조체 선언이 main 함수 앞에 있으면 프로그램 전체에서 사용할 수 있고, 함수 안에 선언하면 그 함수 안에서만 사용이 가능하다.</h4>
<pre><code>struct student s1; </code></pre><p>→ struct student : int 와 double 로 이루어진 새로운 자료형이다.
→ s1 : 구조체 변수명이다.</p>
<h3 id="✳-구조체-변수의-크기">✳ 구조체 변수의 크기</h3>
<ul>
<li>구조체 멤버의 크기가 들쑥날쑥한 경우 멤버 사이에 패딩 바이트를 넣어 멤버를 가지런하게 정렬합니다. 이를 바이트 얼라인먼트 라고 합니다.</li>
</ul>
<pre><code>struct student     // 구조체 선언
{
    int num;              
    double grade;
};</code></pre><ul>
<li>grade 멤버의 크기가 가장 크므로 8byte 가 기준 단위가 됩니다.
<img src="https://velog.velcdn.com/images/hyen________/post/8c4b7248-e445-42bb-af30-5c2937dc3f40/image.png" alt=""></li>
</ul>
<ul>
<li>num 은 4byte 이므로 빈 곳은 패딩 바이트로 채우게 됩니다.</li>
<li>결국 패딩 바이트가 포함되므로 전체 구조가 4, 4, 8 로 16byte 가 됩니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 전역변수]]></title>
            <link>https://velog.io/@hyen________/C-C-%EC%A0%84%EC%97%AD%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@hyen________/C-C-%EC%A0%84%EC%97%AD%EB%B3%80%EC%88%98</guid>
            <pubDate>Tue, 20 Feb 2024 10:14:51 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-전역변수">◾ 전역변수</h1>
</blockquote>
<h3 id="📕-전역변수">📕 전역변수</h3>
<ul>
<li>전역변수란 함수 밖에 변수를 선언하는 것을 말합니다.</li>
<li>전역변수의 사용 범위는 프로그램 전체이므로 어떤 함수에서도 사용이 가능합니다.<pre><code>#include &lt;stdio.h&gt;
</code></pre></li>
</ul>
<p>void assign10();
void assign20();</p>
<p>int a = 5;</p>
<p>int main()
{
    printf(&quot;함수 호출 전 a 값 : %d \n&quot;, a);</p>
<pre><code>assign10();
assign20();

printf(&quot;함수 호출 후 a 값 : %d \n&quot;, a);
return 0;</code></pre><p>}</p>
<p>void assign10(void)
{
    a = 10;    // 전역 변수 a에 10 대입
}</p>
<p>void assign20(void)
{
    int a;   // 전역 변수와 같은 이름의 지역 변수</p>
<pre><code>a = 20;  // 지역 변수 a 에 20 대입</code></pre><p>}</p>
<p>```
<img src="https://velog.velcdn.com/images/hyen________/post/fa413c8c-6273-480c-aeee-ce478fc5c1c5/image.png" alt=""></p>
<ul>
<li>함수 호출 후 20이 안나오고 10이 나온다.</li>
<li>전역변수와 지역변수의 이름이 같으면 지역변수를 먼저 사용하기 때문이다.</li>
</ul>
<p>✳ 전역변수의 문제점
① 전역변수의 이름을 바꾸면 그 변수를 사용하는 모든 함수를 찾아 수정해야 한다.
② 전역변수의 값이 잘못된 경우 접근 가능한 모든 함수를 의심해야 한다.
③ 코드 블록 내에 같은 이름의 지역변수를 선언하면 거기서는 전역변수를 사용할 수 없다는 점!</p>
<p>고로 전역변수를 제한적으로 사용하거나 사용하지 않는 게 좋다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 지역변수]]></title>
            <link>https://velog.io/@hyen________/C-C-%EC%A7%80%EC%97%AD%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@hyen________/C-C-%EC%A7%80%EC%97%AD%EB%B3%80%EC%88%98</guid>
            <pubDate>Tue, 20 Feb 2024 09:27:38 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-지역변수">◾ 지역변수</h1>
</blockquote>
<h3 id="📘-1-지역변수">📘 1. 지역변수</h3>
<ul>
<li>지역 변수는 범위가 함수 내, 즉 일정 지역에서만 사용하는 변수입니다.</li>
<li>지역 변수는 사용 범위가 블록 내부로 제한되므로 다른 함수에서는 사용할 수 없습니다.</li>
<li>지역 변수는 { } 안에 있는 걸 말한다.</li>
</ul>
<pre><code>#include &lt;stdio.h&gt;

void assign(void);  // 함수 선언

int main()
{
    int a = 0;     // 지역 변수 선언과 초기화

    assign();      // 함수 호출
    printf(&quot;main 함수 a : %d\n&quot;, a);

    return 0;
}

void assign(void)
{
    int a;            // main 함수에 있는 변수와 같은 이름의 지역 변수

    a = 10;            // assign 함수 안에 선언된 a에 대입
    printf(&quot;main 밖 a : %d\n&quot;, a);
}</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/c7d03443-4c2a-4913-aff5-ecc39a37be2e/image.png" alt=""></p>
<ul>
<li>이와 같이 다른 함수에 같은 이름의 변수를 선언해도 이름이 서로 충돌하지 않는다는 점!</li>
<li>지역 변수는 이름이 같아도 선언된 함수가 다르면 각각 독립된 공간을 갖습니다.
즉 두 함수에 선언된 변수 a는 이름만 같을 뿐 메모리에 별도의 저장 공간을 갖는다.</li>
</ul>
<br />


<h4 id="✳-지역변수의-장점">✳ 지역변수의 장점</h4>
<p>① 메모리를 효율적으로 사용한다.
지역 변수는 함수 안에서만 사용하기 때문에 함수가 반환되면 그 저장 공간을 계속 유지할 필요가 없다. 따라서 운영체제는 지역 변수가 선언된 함수가 반환되면 할당된 저장 공간을 자동으로 회수해 재활용한다.
② 디버깅에 유리하다.</p>
<h4 id="✔-블록-안에서-사용하는-지역-변수">✔ 블록 안에서 사용하는 지역 변수</h4>
<pre><code>#include &lt;stdio.h&gt;

int main()
{
    int a = 10; 
    int b = 20;

    printf(&quot;교환 전 a와 b 값 : %d, %d \n&quot;, a, b);
    {
        int temp;   // 변수 선언

        temp = a;   // 변수 안에 a 값 10 넣기
        a = b;      // a 안에 b 값 20 넣기
        b = temp;   // b 안에 temp 값 10 넣기
    }
    printf(&quot;교환 후 a와 b 값 : %d, %d \n&quot;, a, b);


    return 0;
}</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/9f749521-53c9-44d5-b75e-9189b31260d9/image.png" alt=""></p>
<ul>
<li>이와같이 선언 위치에 따라 사용 범위가 달라질 수 있다는점!</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 배열]]></title>
            <link>https://velog.io/@hyen________/C-C-%EB%B0%B0%EC%97%B4</link>
            <guid>https://velog.io/@hyen________/C-C-%EB%B0%B0%EC%97%B4</guid>
            <pubDate>Tue, 20 Feb 2024 04:45:42 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-배열">◾ 배열</h1>
</blockquote>
<ul>
<li><p>배열이란 같은 형태의 많은 데이터를 반복문으로 처리하기 위해서 메모리에 연속적으로 저장해 놓고 쪼개서 사용하는 방법을 말한다.
<img src="https://velog.velcdn.com/images/hyen________/post/2d8bfc4a-c8d4-46d0-b5a2-66b929e566b7/image.png" alt=""></p>
</li>
<li><p>int 5개를 만들고 싶어 &gt;&gt; int ary[5] = { };
배열의 이름을 ary로 하며 int 자료형 5묶음을 만들고 { } 사용해서 전체를 0으로 초기화 하겠다.
<img src="https://velog.velcdn.com/images/hyen________/post/03773f99-9581-405b-ad70-f2ff191d891c/image.png" alt=""></p>
</li>
</ul>
<p>-&gt; 배열은 항상 조심히 써야 한다. 나는 [5]으로 정해놨는데 [6]으로 잘못 적었을 시 다른 사람이 적어둔 배열을 불러올 수 있다. </p>
<h4 id="📃-예를-들어보자">📃 예를 들어보자</h4>
<pre><code>#include &lt;stdio.h&gt;

int main()
{
    int ary[5] =  {};

    ary[0] = 10;
    ary[1] = 20;
    ary[2] = ary[0] + ary[1];
    scanf_s(&quot;%d&quot;, &amp;ary[3]);      // 키보드로 입력받은 값이므로 ary 앞에 &amp;를 붙입니다.

    printf(&quot;%d \n&quot;, ary[2]);
    printf(&quot;%d \n&quot;, ary[3]);
    printf(&quot;%d \n&quot;, ary[4]);    // 마지막 배열은 정하지 않으면 쓰레기 값

    return 0;
}</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/1bad610d-53e5-4779-9d0b-7912c7c1467a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/hyen________/post/ff211045-9063-4864-91ea-65cf1a447aa9/image.png" alt=""></p>
<ul>
<li>밑에 처럼 이상하게 나온 숫자를 쓰레기 값이라고한다.</li>
<li>위에처럼 0이 나오는 이유는 = { } 를 사용해서 0으로 초기화했기 때문이다 아무것도 적지 않았을 경우 0으로 출력된다 ary[4]를 출력했는데 값이 없기 때문에 0으로 나오는 것이다.<br />

</li>
</ul>
<p><img src="https://velog.velcdn.com/images/hyen________/post/b0fa44de-f713-43f3-b3b6-b1093d7f41f6/image.png" alt="">
→ 변수는 각각의 공간에 이름을 지정하지만, 배열은 메모리에 연속된 공간이 할당되며 하나의 이름으로 사용된다.</p>
<blockquote>
<h2 id="📙-배열과-반복문을-이용한-성적표-만들기">📙 배열과 반복문을 이용한 성적표 만들기</h2>
</blockquote>
<pre><code>#include &lt;stdio.h&gt;

int main()
{
    int score[5];     // 다섯 과목의 성적을 입력할 int형 배열 선언
    int total = 0;    // 총점을 누적할 변수
    double avg;       // 평균을 저장할 변수

    // 각 배열에 성적 입력
    for (int i = 0; i &lt; 5; ++i)
    {
        scanf_s(&quot;%d&quot;, &amp;score[i]);
    }

    // 성적을 누적해 총점 계산
    for (int i = 0; i &lt; 5; ++i)
    {
        total += score[i];
    }
    avg = total / 5.0;       // 평균 계산

    // 성적 출력
    for (int i = 0; i &lt; 5; ++i)
    {
        printf(&quot;%5d&quot;, score[i]);
    }
    printf(&quot;\n&quot;);

    printf(&quot;평균 : %.1lf\n&quot;, avg);            // .1lf .2lf .3lf : 소수점 자리

    return 0;
}</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/52f8dda5-7b25-4cb0-825d-72bc86eb1f5a/image.png" alt=""></p>
<blockquote>
<p>📃 sizeof 연산자를 활용한 배열 처리 방법</p>
</blockquote>
<ul>
<li>sizeof(배열명) / sizeof(배열 요소)<pre><code>#include &lt;stdio.h&gt;
</code></pre></li>
</ul>
<p>int main()
{
    int score[5];     // 과목 수가 변경될 경우 이것만 바꾸면 된다.
    int total = 0;
    double avg;<br>    int count;        // 배열 요소의 개수를 저장할 변수</p>
<pre><code>// 배열의 전체 크기를 구할 때 sizeof를 사용한다.
count = sizeof(score) / sizeof(score[0]);    // 배열 요소의 개수 계산

// 각 배열에 성적 입력
for (int i = 0; i &lt; count; ++i)
{
    scanf_s(&quot;%d&quot;, &amp;score[i]);
}

// 성적을 누적해 총점 계산
for (int i = 0; i &lt; count; ++i)
{
    total += score[i];
}
avg = total / count;       // 평균 계산

// 성적 출력
for (int i = 0; i &lt; count; ++i)
{
    printf(&quot;%5d&quot;, score[i]);
}
printf(&quot;\n&quot;);

printf(&quot;평균 : %.1lf\n&quot;, avg);            // .1lf .2lf .3lf : 소수점 자리

return 0;</code></pre><p>}</p>
<pre><code>![](https://velog.velcdn.com/images/hyen________/post/466307ac-24c8-45ec-a5e2-4d5af5dc86b6/image.png)

-&gt; 이렇게 사용하면 나중에 요소의 개수를 바꾸더라도 나머지 코드를 수정할 필요가 없다.</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 재귀함수]]></title>
            <link>https://velog.io/@hyen________/C-C-%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@hyen________/C-C-%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98</guid>
            <pubDate>Mon, 19 Feb 2024 11:44:12 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-재귀함수">◾ 재귀함수</h1>
</blockquote>
<ul>
<li>재귀함수란 함수 안에서 자기 자신을 호출하는 것을 말한다.</li>
<li>장점으로는 가독성과 구현의 용이가 있다는 것이고,</li>
<li>단점으로는 실수할 가능성이 있으며, 성능이 많이 떨어진다. (여러 번 함수를 호출)</li>
<li>그리고 사용하기가 어려워서 이해 하는데 오래 걸린다. </li>
<li>반복문으로 대체가 가능하긴 한데 스택, 큐를 사용해야 한다.<br />

</li>
</ul>
<h3 id="1-팩토리얼-재귀함수-미사용">1. 팩토리얼 재귀함수 미사용</h3>
<pre><code>int Factorial(int _iCount)
{
    // int i = 5;
    int iValue = 1;

    for (int k = 0; k &lt; _iCount - 1; ++k)
    {
        iValue *= (k + 2);
    }

    return iValue;
}

int main()
{
    int iValue = Factorial(5);    
    printf(&quot;%d : \n&quot;, iValue);

    return 0;
}</code></pre><h3 id="2-팩토리얼-재귀함수-사용">2. 팩토리얼 재귀함수 사용</h3>
<pre><code>int Factorial_Re(int _iCount)
{
    if (1 == _iCount)
    {
        return 1;
    }

    return _iCount * Factorial_Re(_iCount - 1);
}

int main()
{
    int iCount = Factorial_Re(5);    
    printf(&quot;%d : \n&quot;, iCount);

    return 0;
}</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/639f2031-75fc-4e8f-8257-dce079b2ec19/image.png" alt=""></p>
<ul>
<li>결과는 같이 나온다.<br />

</li>
</ul>
<h3 id="1-피보나치-재귀함수-미사용">1. 피보나치 재귀함수 미사용</h3>
<pre><code>// 피보나치 수열  (0, 1), (1, 1) 대부분 1, 1 을 사용한다
// 1 1 2 3 5 8 13 21 34 55.....
int Fibonacci(int _iCount)
{
    if (1 == _iCount || 2 == _iCount)
    {
        return 1;
    }

    int iPrev1 = 1;
    int iPrev2 = 1;
    int iValue = 0;

    for (int i = 0; i &lt; _iCount - 2; ++i)
    {
        iValue = iPrev1 + iPrev2;
        iPrev1 = iPrev2;
        iPrev2 = iValue;
    }

    return iValue;



}</code></pre><h3 id="2-피보나치-재귀함수-사용">2. 피보나치 재귀함수 사용</h3>
<pre><code>// 피보나치 수열 재귀함수
int Fibonacci_Re(int _iCount)
{
    if (1 == _iCount || 2 == _iCount)
    {
        return 1;
    }

    return Fibonacci_Re(_iCount - 1) + Fibonacci_Re(_iCount - 2);
}
</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/f6961b44-e8bd-4fc4-9be3-3114f6af0905/image.png" alt=""></p>
<ul>
<li>마찬가지로 결과는 같지만 좀 더 간결해진다.</li>
<li>하지만 크기가 커질수록 오류가 시간이 엄청 오래 걸린다. 그래서 꼬리함수를 사용하는데...</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 함수]]></title>
            <link>https://velog.io/@hyen________/C-C-%ED%95%A8%EC%88%98-ysjr5lqr</link>
            <guid>https://velog.io/@hyen________/C-C-%ED%95%A8%EC%88%98-ysjr5lqr</guid>
            <pubDate>Mon, 19 Feb 2024 09:20:31 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-함수">◾ 함수</h1>
</blockquote>
<ul>
<li>함수는 main을 주 함수로 사용한다. 프로그램이 종료된다는 것은 main 함수가 종료되었다는 것이다. </li>
<li>함수는 스택과 동작이 같다. 선입후출로 먼저 들어오면 나중에 나가게 된다.</li>
</ul>
<pre><code>int Add(int a, int b)
{
    return a + b;
}

int main()
{

    int iAdd = Add(50, 200);
    printf(&quot;%d&quot;, iAdd);

    return 0;
}</code></pre><br/>
<br/>
✳ 함수를 왜 사용할까? 그 이유는 재사용하기 위해서이다. 예를 들어 보자면


<h3 id="1-첫-번째-방식">1. 첫 번째 방식</h3>
<pre><code>int main()   // 주 함수
{
    int i = 5;
    int iValue = 1;

    for (int k = 0; k &lt; i - 1; ++k)
    {
        iValue *= (k + 2);

    }
    printf(&quot;%d : \n&quot;, iValue);</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/21d3846a-e980-4d61-8349-b1b867f8165c/image.png" alt=""></p>
<h3 id="2-두-번째-방식">2. 두 번째 방식</h3>
<pre><code>int Factorial(int _iCount)
{
    // int i = 5;
    int iValue = 1;

    for (int k = 0; k &lt; _iCount - 1; ++k)
    {
        iValue *= (k + 2);
    }

    return iValue;
}



int main() // 주 함수
{
    int iValue = Factorial(5);
    printf(&quot;%d : \n&quot;, iValue);

    return 0;
}</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/4c6b48fb-5da5-42cf-891d-ee37a5e9d359/image.png" alt=""></p>
<ul>
<li>지금은 main 함수에 하나밖에 없겠지만 많아진다면 굉장히 복잡해지기 때문에 밖에서 따로 만들고 불러오는 식으로 하는 것이 좋다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 반복문]]></title>
            <link>https://velog.io/@hyen________/C-C-%EB%B0%98%EB%B3%B5%EB%AC%B8</link>
            <guid>https://velog.io/@hyen________/C-C-%EB%B0%98%EB%B3%B5%EB%AC%B8</guid>
            <pubDate>Mon, 19 Feb 2024 04:40:37 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-반복문">◾ 반복문</h1>
</blockquote>
<ul>
<li>for</li>
<li>while</li>
<li>continue</li>
<li>break</li>
</ul>
<p>✳ 반복문은 for, while 이 있다.</p>
<h2 id="1-for">1. for</h2>
<pre><code>    for(반복자 초기화(딱 한번만 실행됨); 반복자 조건 체크; 반복자 변경 )
    {
        printf();
    }</code></pre><ul>
<li>조건이 맞을 때까지 실행된다.<pre><code>  for (int i = 0; i &lt;= 10; ++i)
  {
      printf(&quot;안녕하세요\n&quot;);
  }
</code></pre></li>
</ul>
<pre><code>![](https://velog.velcdn.com/images/hyen________/post/02e460f5-ad2f-44c8-a619-54da76813aa0/image.png)

- i를 0부터 초기화 시켰기 때문에 0부터 시작해서 출력하고 끝나고 다시 조건문으로 와서 증가하고 출력하고 반복하다가 10이 도달했을 때 종료된다.


## 2. while</code></pre><p>int b = 0;
while (b &lt; 15)
{
    printf();
    ++b
}</p>
<pre><code>- while은 밖에서 초기화를 시킨다
- for과 똑같은 방식으로 돌아간다.

## 3. continue

- continue는 정해둔 부분을 실행시키지 않고 통과시킨다.</code></pre><pre><code>for (int i = 0; i &lt;= 10; ++i)
{
    if (i % 2 == 1)
    {
        continue;
    }

    printf(&quot;안녕하세요\n&quot;);
}</code></pre><pre><code>![](https://velog.velcdn.com/images/hyen________/post/6ec3b2d7-e3cf-48bd-a4cf-261afa19e177/image.png)

- if문을 사용해서 만약에 2로 나눴을 때 나머지가 1일 경우를 나타내보았다.
- 그로 인해 0,2,4,6,8,10는 실행이 되었고, 1,3,5,7,9만 실행이 되지않았다.

## 4. break

- break는 정해둔 부분에서 더 이상 실행되지 않으며 멈추게 된다.</code></pre><pre><code>for (int i = 0; i &lt;= 10; ++i)
{
    if (i % 2 == 1)
    {
        break;
    }

    printf(&quot;안녕하세요\n&quot;);
}</code></pre><pre><code>![](https://velog.velcdn.com/images/hyen________/post/31c679fb-28f1-44e8-bce0-7c00928cb041/image.png)

- 나머지가 1인 1에서 더 이상 실행되지 않고 멈췄다.</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 입출력]]></title>
            <link>https://velog.io/@hyen________/C-C-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@hyen________/C-C-%ED%95%A8%EC%88%98</guid>
            <pubDate>Mon, 19 Feb 2024 04:18:31 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-입출력">◾ 입출력</h1>
</blockquote>
<ul>
<li>printf( );</li>
<li>scanf( );</li>
<li>%d</li>
<li>#include &lt;stdio.h&gt;</li>
</ul>
<p>💡 printf, scanf 사용하려면 &lt;studio.h&gt;를 불러와야한다.</p>
<h2 id="1-printf-는-출력을-나타낸다">1. printf 는 출력을 나타낸다.</h2>
<pre><code>    #include &lt;stdio.h&gt;  // 표준 입출력 헤더 참조 

    int main()
    {
        for (int i = 0; i &lt;= 10; ++i)
        {
            printf(&quot;숫자 : \n&quot;);
        }
           return 0;
    }</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/183325e9-5e54-4e3d-8260-0083741a9ed7/image.png" alt=""></p>
<h2 id="2-scanf-는-입력을-나타낸다">2. scanf 는 입력을 나타낸다.</h2>
<pre><code>    int input = 0;
    scanf_s(&quot;%d&quot;, &amp;input);</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/2cf6d0c0-bbd4-4e7a-be90-bb059faf823b/image.png" alt=""></p>
<p>-&gt; 이와 같이 입력란에 적을 때까지 로딩 중으로 나타난다.
<img src="https://velog.velcdn.com/images/hyen________/post/ed032efe-b1d3-486e-8b1f-2db70b57082d/image.png" alt=""></p>
<p>-&gt; 입력란에 글을 적고 엔터를 누르면 입력이 된다.</p>
<h2 id="3-d">3. %d</h2>
<ul>
<li><p>%d는 다른 정수를 치환시킨다.</p>
<pre><code>  printf(&quot;값 : %d \n&quot;, 10);
  printf(&quot;값 : %f \n&quot;, 3.14f);   // 실수</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/6bbae743-52f5-4885-834a-0a85e79ffefb/image.png" alt=""></p>
</li>
<li><p>&quot;&quot;안에 %d 를 넣고 , %d 에 넣을 값을 넣어준다.</p>
</li>
<li><p>실수도 가능한데 %f 로 적어줘야한다.</p>
<br />

</li>
</ul>
<p>✔ %d를 for에 사용해보면</p>
<pre><code>    for (int i = 0; i &lt;= 10; ++i)
    {
        printf(&quot;숫자 : %d \n&quot;, i);
    }</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/c8121a5d-37eb-41af-947c-667b4f78204d/image.png" alt=""></p>
<ul>
<li>이런식으로 구현이 가능하다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 변수]]></title>
            <link>https://velog.io/@hyen________/C-C-%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@hyen________/C-C-%EB%B3%80%EC%88%98</guid>
            <pubDate>Mon, 19 Feb 2024 02:41:06 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-변수">◾ 변수</h1>
</blockquote>
<ul>
<li>지역변수</li>
<li>전역변수</li>
<li>정적변수(static)</li>
<li>외부변수(extern)</li>
</ul>
<p>-&gt; 변수는 사용 범위와 메모리에 존재하는 기간에 따라 종류가 다양하다.</p>
<br />

<h3 id="📕-2-전역변수">📕 2. 전역변수</h3>
<p>-</p>
<br />

<h3 id="📗-3-정적변수">📗 3. 정적변수</h3>
<br />

<h3 id="📙4-외부변수">📙4. 외부변수</h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 비트 연산자 사용 예시]]></title>
            <link>https://velog.io/@hyen________/C-C-%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%8B%9C</link>
            <guid>https://velog.io/@hyen________/C-C-%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%8B%9C</guid>
            <pubDate>Mon, 19 Feb 2024 02:40:54 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-비트-연산자-사용-예시">◾ 비트 연산자 사용 예시</h1>
</blockquote>
<p>// # : 전처리기 먼저 처리해줌 
// define : 내가 지정한 구문을 특정숫자로 치환해줌</p>
<pre><code>#define HUNGRY 1
#define THIRSTY 2

int main()
{

    int iStatus = 0;

    // 상태 추가
    iStatus |= HUNGRY;
    iStatus |= THIRSTY;

    // 상태 확인
    if (iStatus &amp; THIRSTY)
    {

    }

    // 특정 자리 비트 제거
    iStatus &amp;= ~HUNGRY;


    return 0;
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 비트 연산자]]></title>
            <link>https://velog.io/@hyen________/C-C-%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@hyen________/C-C-%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Fri, 16 Feb 2024 04:37:22 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-비트-연산자">◾ 비트 연산자</h1>
</blockquote>
<ul>
<li>비트 단위로 연산이 진행될 때</li>
<li>쉬프트 &lt;&lt;, &gt;&gt; : 비트를 정한 방향으로 한칸씩 민다!</li>
</ul>
<pre><code>    unsigned char byte = 1;

    // byte = byte &lt;&lt; 1;
    byte &lt;&lt;= 1;    // 왼쪽으로 한칸 밀겠다.</code></pre><p><img src="https://velog.velcdn.com/images/hyen________/post/1272cac0-1683-4222-a1c1-0a4e2a06efc6/image.png" alt=""></p>
<ul>
<li>10진수에서 숫자가 다음자리로 넘어간다면 10배 증가</li>
<li>2진수에서 숫자가 다음자리로 넘어간다면 2배 증가</li>
</ul>
<br />

<pre><code>byte &lt;&lt;= 3; // 2^n 배수
byte &gt;&gt;= 1; // 2^n 나눈 몫</code></pre><ul>
<li>1/2 절반으로 줄어듦 나누기는 나머지가 발생할 수 있음</li>
<li>(&gt;&gt;) 할 시 밀리면서 나머지는 사라짐 고로 몫만 남게 됨<br />

</li>
</ul>
<blockquote>
<h2 id="◾-비트-곱-합-xor-반전">◾ 비트 곱(&amp;), 합(|), xor(^), 반전(~)</h2>
</blockquote>
<ul>
<li>&amp; : 둘다 1인 경우 1</li>
<li>| : 둘중 하나라도 1이면 1</li>
<li>^ : 같으면 0, 다르면 1</li>
<li>~ : 1은 0으로, 0은 1로</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 조건문]]></title>
            <link>https://velog.io/@hyen________/C-C-%EC%A1%B0%EA%B1%B4%EB%AC%B8</link>
            <guid>https://velog.io/@hyen________/C-C-%EC%A1%B0%EA%B1%B4%EB%AC%B8</guid>
            <pubDate>Fri, 16 Feb 2024 02:29:29 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-조건문">◾ 조건문</h1>
</blockquote>
<h2 id="1-if-else-if-else">1. if, else if, else</h2>
<pre><code>    a = 0; 변수 선언
    if (조건)
    {
        if 가 참일 경우 수행
    }
    else
    {
        if 가 거짓일 경우 수행
    }</code></pre><p> -&gt; 가장 기본적인 문구 </p>
<pre><code>     a = 0; 변수 선언
    if (조건)
    {
        if 가 참일 경우 수행
    }
    else if ()
    {

    }
    else if ()
    {

    }
    else
    {

    }</code></pre><p>-&gt; else if ()를 계속 늘릴 수 있음
-&gt; 조건이 틀리면 다음 또 틀리면 다음 이런식으로 넘어감</p>
<h2 id="2-switch">2. switch</h2>
<pre><code>
    switch (상수나 변수)
    {
    case 10:      일치하는 쪽 실행해줌

        break;    일치할 경우 브레이크 멈추고 실행

    case 20:

        break;
    default:
        break;
    }</code></pre><p>-&gt; 만약 break 를 실수로 못 적었을 경우 밑으로 내려가 버린다는 단점이 있다.</p>
<h2 id="2-삼항연산자">2. 삼항연산자</h2>
<pre><code>    int i = 20;
    i = 0;
    i == 20 ? i = 100 : i = 200;</code></pre><p>-&gt; i가 20이 맞으면 100을 실행 틀리면 200을 실행하겠다.
-&gt; 가독성이 떨어져서 잘 사용하지 않을 거 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Unreal] 언리얼 단축키 및 사용법]]></title>
            <link>https://velog.io/@hyen________/Unreal-2D-2</link>
            <guid>https://velog.io/@hyen________/Unreal-2D-2</guid>
            <pubDate>Thu, 15 Feb 2024 06:14:39 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="◾-unreal-사용법-및-설명">◾ Unreal 사용법 및 설명</h1>
</blockquote>
<ul>
<li>뷰포트 : 게임 월드를 들여다보는 창</li>
<li>기즈모(Gizmo) : 화살표 3개 달린</li>
<li>블루프린터를 만들 때 일반적으로 이름 앞에 BP_ 접두사를 붙입니다.</li>
</ul>
<h3 id="✳-단축키">✳ 단축키</h3>
<ul>
<li>ctrl z  : 실행 취소</li>
<li>ctrl y  : 다시 실행</li>
<li>ctrl : 동시에 여러 항목을 선택할 수 있음</li>
<li>shift : 동시에 여러 항목을 선택할 수 있음</li>
<li>ctrl + shift + s : 저장</li>
<li>G : 게임 뷰 모드</li>
<li>F11 : 전체 모드</li>
<li>물체 + F : 초점 맞추기</li>
<li>왼쪽or오른쪽 + c : 화면 가까이</li>
<li>왼쪽or오른쪽 + z : 화면 멀리</li>
<li>ctrl + 1~10 : 책갈피 지정<p> 시작 및 종료</li>
<li>alt + p : 시작</li>
<li>esc : 종료</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 연산자]]></title>
            <link>https://velog.io/@hyen________/C-C-%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@hyen________/C-C-%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Thu, 15 Feb 2024 04:24:41 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1> ◾ 연산자
</blockquote>
<p>  -&gt; 연산자에는 산술 연산자, 증감 연사자, 논리 연산자, 대입 연산자가 있다.</p>
<h3 id="1-산술-연산자">1. 산술 연산자</h3>
<p>  +, -, *, /, %(모듈러스, 나머지, 피연산자가 모두 정수)
  ++, --</p>
<pre><code>int data = 10 + 10;
data = data + 20;   // 1
data += 20;   // 2</code></pre><p>  -&gt; 두 방법은 같지만 밑에 방법 처럼 더 편하게 사용이 가능하다.
  -&gt; +, -, * 모두 원리는 같다.</p>
<h3 id="2-증감-연산자">2. 증감 연산자</h3>
<p>  ++, --<br>  한 단계 증가 또는 감소</p>
<pre><code>      ++data;  전위
    data++;  후위</code></pre><p>  -&gt; 후위 연산자로 사용하는 경우, 연산자 우선순위가 가장 나중으로 밀린다.
  -&gt; 연산자는 특별한 사유가 없는 한 전위로 하기</p>
<h3 id="3-논리-연산자">3. 논리 연산자</h3>
<p>  !(역), &amp;&amp;(and), ||(or), 참(true), 거짓(false) 등이 있다.
  참 : 0이 아닌 모든 값
  거짓 : 0</p>
<p>  참과 거짓을 나타내는 bool 이있는데 0과1밖에 모른다 size는 1byte이다.</p>
<pre><code>      bool truefalse = false;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Unreal] 왜 언리얼을 사용할까?]]></title>
            <link>https://velog.io/@hyen________/Unreal-2D</link>
            <guid>https://velog.io/@hyen________/Unreal-2D</guid>
            <pubDate>Wed, 14 Feb 2024 10:23:15 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/hyen________/post/8eee42bd-de6b-48af-85cb-ef7e5ae0fb68/image.jpg" alt=""></p>
<blockquote>
<h1 id="◾-왜-언리얼을-사용하는가">◾ 왜 언리얼을 사용하는가?</h1>
</blockquote>
<h3 id="❔-왜-2d-및-2d3d-혼합-게임을-만드는-데-언리얼-엔진처럼-강력한-엔진을-사용하는가">❔ 왜 2D 및 2D/3D 혼합 게임을 만드는 데 언리얼 엔진처럼 강력한 엔진을 사용하는가?</h3>
<p>① 전반적인 작업 방식과 블루프린트 비주얼 스키립팅 때문이다.
이 시스템을 사용하면 코드를 한 줄도 작성하지 않고 노드 기반 에디터로 게임 전체를 제작할 수 있기 때문이다. 덕분에 아티스트 및 게임 디자이너가 프로젝트에 쉽게 참여할 수 있다. </p>
<p>② C++ 대신 이 시스템을 사용해 작업 속도를 높일 수 있기 때문에 개발 시간을 크게 단출할 수 있다. </p>
<p>③ 라이선스 에픽 게임즈는 만든 게임으로 백만 달러 이상의 수익을 거두기 전까지는 아무것도 지불할 필요가 없다. </p>]]></description>
        </item>
        <item>
            <title><![CDATA[[C, C++] 자료형]]></title>
            <link>https://velog.io/@hyen________/C-C-%EC%9E%90%EB%A3%8C%ED%98%95</link>
            <guid>https://velog.io/@hyen________/C-C-%EC%9E%90%EB%A3%8C%ED%98%95</guid>
            <pubDate>Wed, 14 Feb 2024 07:56:42 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/hyen________/post/da8d327d-04b1-4d3f-a7af-ffa871aa527d/image.jpg" alt=""></p>
<blockquote>
<h1 /> ◾ 자료형
</blockquote>
<p>자료형이란 변수를 데이터 형식을 지정해주는 것이다.
크기 단위 = byte 를 사용한다.
<img src="https://velog.velcdn.com/images/hyen________/post/e62885a4-d56c-4c49-849a-c87a3fad9f95/image.png" alt=""></p>
<p>-&gt; 1byte = 8bit 로 나타내는데 1bit는 0과1로 나타낼 수 있다. <br/><br/></p>
<pre><code>int i = 0;</code></pre><p>-&gt; int = 자료형을 나타낸다.
-&gt; i = 변수명을 나타낸다. (마음대로 정해도 상관없음)
<br/></p>
<h4 id="✳-자료형은-정수형과-실수형으로-나뉜다">✳ <em><strong>자료형은 정수형과 실수형으로 나뉜다.</strong></em></h4>
<blockquote>
<h1 /> ◾ 정수형
</blockquote>
<p>정수형의 종류는 char(1), short(2), int(4), long(4), long long(8) 등이 있다.</p>
<pre><code>    // 1byte 양수 표현
    // 0 ~ 255
    unsigned char c = 0;
    c = 0;
    c = 255;
    c = 256;</code></pre><p>-&gt; unsigned 를 사용하면 오직 양수만 사용하겠다고 선언하는 것이다.
-&gt; 그러므로 0 ~ 255 까지 나타낼 수 있다.
-&gt; 256일 경우 -1이 나온다. 왜냐하면 char은 1byte로 8칸을 넘어서기 때문에 ?</p>
<pre><code>    // 1byte 양수, 음수 둘다 표현
    // -128 ~ -1,  0 ~ 127
    char a = 0;
    a = 255;</code></pre><p>-&gt; 자료형 앞에는, signed 가 생략되어 있다. 그러므로 양수와 음수 둘 다 사용 가능하다.
<br /></p>
<h4 id="✳-음의-정수-찾기2의-보수법">✳ 음의 정수 찾기(2의 보수법)</h4>
<pre><code>// 대응되는 양수의 부호를 전환 후, 1을 더한다. 
// 0 0 0 0 0 0 1 0  = 2     -----
// 1 1 1 1 1 1 0 1  + 1         ㅣ  + 더해주기
// 1 1 1 1 1 1 1 0  = -2    -----
// 0 0 0 0 0 0 0 0</code></pre><p>-&gt; 이렇게 하면 쉽게 찾을 수 있다. 
<br /></p>
<blockquote>
<h1 id="◾-실수형">◾ 실수형</h1>
</blockquote>
<p>실수형 종류는 float(4), double(8) 등이 있다.
실수형은 정수표현 방식과 다른데 실수 표현방식은 정밀도에 의존한다.
따라서 double(8) 자료형이 float(4)보다 더 아래의 소수점까지 정확하게 표현이 가능하다.</p>
<pre><code>float f = 10.2415f + (float)20;     // 안 적어줘도 자동으로 변환해주지만 명시적으로 변환하자</code></pre><p>-&gt; 정수는 정수끼리, 실수는 실수끼리 연산하되, 두 표현방식의 피 연산자가 연산될 경우 명시적으로 반환하자
-&gt; 실수를 상수로 적을 경우 소수점 뒤에 f 를 붙이면 float 자료형으로, f 를 붙이지 않으면 double 자료형으로 간주한다.</p>
]]></description>
        </item>
    </channel>
</rss>