>백엔드 개발 >C++ >CS- 4주차

CS- 4주차

Barbara Streisand
Barbara Streisand원래의
2024-12-31 18:24:10726검색

픽셀

픽셀은 이미지를 구성하는 가장 작은 색상의 점입니다.
이미지가 0과 1로 구성된 것으로 상상해 보면 0은 검은색을 나타내고 1은 흰색을 나타냅니다.

CS- Week 4

RGB (Red, Green, Blue)는 각 색상의 양을 나타내는 숫자입니다. Adobe Photoshop에는 다음 설정이 표시됩니다.

CS- Week 4

위 이미지에서 선택한 빨간색, 녹색, 파란색의 양에 따라 색상이 어떻게 변하는 지 확인할 수 있습니다. 또한 이 이미지에서 색상은 단지 세 가지 값으로만 ​​표현되는 것이 아니라 특수 숫자와 기호로 구성된 값으로 표현된다는 것을 알 수 있습니다. 예를 들어 값 255는 FF로 표시됩니다.


16진수

16진수 체계는 16자만 사용하여 숫자를 쓰는 숫자 체계입니다. 그 내용은 다음과 같습니다.

0 1 2 3 4 5 6 7 8 9 A B C D E F

16진수 체계에서 각 열은 16단계를 나타냅니다.
0 – 00
1 – 01
9 – 09
10 – 0A
15 – 0F
16 – 10
255는 FF로 표시됩니다. 16 x 15(또는 F)가 240에 15를 더해 255가 되기 때문입니다. 16진수로 표현할 수 있는 가장 큰 두 자리 숫자입니다.

16진수 체계를 사용하면 데이터를 더 짧은 형식으로 표현할 수 있습니다. 그렇기 때문에 정보를 좀 더 간결하게 표현하는 것이 편리합니다.


메모리

16진수 체계를 사용하여 메모리 블록에 번호를 매기면 다음과 같이 상상할 수 있습니다.

CS- Week 4

그림의 블록 10이 메모리 위치를 나타내는지 아니면 값 10을 나타내는지 판단하기 어려울 수 있습니다. 따라서 모든 16진수는 일반적으로 접두사 0x로 표시됩니다.

CS- Week 4

정수 변수 n에 값 50을 할당합니다:

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%i\n", n);
}

프로그램이 이 값을 메모리에 저장하는 방법은 다음과 같이 시각화할 수 있습니다.

CS- Week 4

C 언어에는 다음과 같은 메모리 조작 연산자가 있습니다.

  • & – 메모리에 있는 값의 주소를 제공합니다.
  • * – 컴파일러에게 메모리 위치로 이동하라고 지시합니다.

n학습자의 메모리 주소를 알고 싶다면 위 코드를 다음과 같이 변경할 수 있습니다.

0 1 2 3 4 5 6 7 8 9 A B C D E F

%p – 메모리 위치의 주소를 볼 수 있습니다. 그리고 &n은 코드를 실행할 때 메모리에서 0x로 시작하는 변수 n의 주소를 반환합니다.


포인터

포인터는 이 값의 주소를 컴퓨터 메모리에 저장하는 변수입니다.

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%i\n", n);
}

여기서 p는 정수 n의 주소를 포함하는 포인터입니다.

CS- Week 4

포인터는 일반적으로 8바이트 값으로 저장됩니다. p는 위 이미지에서 값 50의 주소를 저장하고 있습니다.
포인터는 메모리의 한 위치에서 다른 위치를 가리키는 화살표로 생각할 수 있습니다.

CS- Week 4


String은 단순히 문자 배열입니다. 예를 들어 문자열 s = "HI!"는 컴퓨터 메모리에서 다음과 같이 표시될 수 있습니다.

CS- Week 4

s라는 포인터는 컴파일러에게 주어진 값의 첫 번째 바이트가 있는 위치를 알려줍니다.

CS- Week 4

다음과 같이

문자열 변수를 만들 수 있습니다.

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%p\n", &n);
}

위 코드는 s 위치에서 시작하는 문자 배열을 인쇄합니다.


문자열 비교

문자열 데이터 유형의 변수 값을 서로 비교합니다:

int n = 50;
int *p = &n;

위 코드에서는 변수 s와 t에 동일한 "Hi!"를 지정합니다. 값을 지정해도 결과적으로 "다른" 메시지가 화면에 나타납니다.
왜 이런 일이 발생하는지 알아내기 위해 변수 s와 t에 동일한 값을 부여하고 다음과 같이 컴퓨터 메모리에 표현할 수 있습니다.

CS- Week 4

그래서 위의 코드는 실제로 변수 s와 t의 값이 아닌 메모리 위치를 비교하려고 합니다.


사자

다음 코드를 입력해 보세요.

#include <stdio.h>

int main(void)
{
    char *s = "HI!";
    printf("%s\n", s);
}

string t = s에서 s의 주소가 t에 복사됩니다. 값이 복사되지 않고 주소만 복사되므로 원하는 결과가 나오지 않습니다.

CS- Week 4

s와 t는 동일한 메모리 블록을 가리키고 있습니다. 그 값을 s에서 t로 복사할 수 없었고 대신 단일 문자열을 가리키는 두 개의 포인터가 되었습니다.

malloc - 프로그래머가 특정 크기의 메모리 블록을 할당할 수 있도록 합니다.
free – 컴퓨터에 이전에 할당된 메모리 블록을 해제하도록 요청합니다.
실제 복사본을 만들기 위해 코드를 변경합니다.

0 1 2 3 4 5 6 7 8 9 A B C D E F

malloc(strlen(s) 1) - 변수 s의 길이에 1을 더하고 해당 문자에 공백을 할당합니다. 그런 다음 for 루프를 통해 s의 값이 t에 복사됩니다.


쓰레기 값

컴파일러에 메모리 블록을 요청하면 이 메모리가 사용 가능하다는 보장은 없습니다. 할당된 메모리는 이전에 컴퓨터에서 사용되었을 수 있으므로 원하지 않는 값이 있을 가능성이 있습니다.

CS- Week 4

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%i\n", n);
}

이 코드를 실행하면 배열에 1024개의 메모리 위치가 할당되지만 for 루프를 사용하여 배열 요소의 값을 표시하면 모두 0이 아닌 것을 알 수 있습니다.

컴퓨터에 변수에 대한 메모리 할당을 요청할 때마다 이를 0이나 다른 값으로 초기화하는 것이 좋습니다.

이 글은 CS50x 2024 소스를 사용했습니다.

위 내용은 CS- 4주차의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.