본문 바로가기
ONLINE COURSES/CS50

address & pointer // malloc // swap // file

by jono 2021. 6. 7.

0. address & pointer

- 포인터의 크기와 메모리의 크기는 관계없음.
  포인터의 크기 - 운영체제에 의해 결정된다. 메모리 주소 데이터의 크기는 운영체제의 기본 처리단위와 일치한다. 
  메모리의 크기- 실제 하드웨어 메모리  RAM의 용량에 따라 정해진다.

#include <stdio.h>
int main(void)
{
    int n = 50;
    int *p = &n;
    printf("%p\n",p);          // n이라는 변수가 저장되어있는 address를 반환한다.
    printf("%i\n",*p);         // address에 저장되어있는 변수n의 값을 반환한다.
}

1. malloc : 문자열복사

※ strcpy(복사한 내용이 들어갈자리, 복사할 대상)
malloc( ) => 괄호 안에 있는 숫자의 크기만큼의 메모리공간을 할당함
                 할당한 메모리의 첫 바이트 주소를 돌려줌

free( ) => 할당되어던 메모리를 다시 반환함
              malloc에서 할당된 메모리를 해제하는 역할을 한다.
ex) free(t);

#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    char *s = get_string("s: ");
    char *t = malloc(strlen(s)+1);

    for (int i=0, n=strlen(s); i<n+1 ; i++)        // for 루프 대신
    {                                              strcpy(t,s)     // t에 s의 내용을 복사한다.
        t[i] = s[i];
    }

    t[0] = toupper(t[0]);

    printf("%s\n", s);
    printf("%s\n", t);
}

2. swap

// swaps two integers using pointers
#include <stdio.h>

void swap(int *a, int *b);

int main(void)
{
    int x = 1;
    int y = 2;

    printf("x is %i, y is %i\n", x,y);
    swap(&x, &y);
    printf("x is %i, y is %i\n", x,y);
}

void swap(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

 

3. file

- 파일 만들기
fprintf( )   &   fclose( )

#include <cs50.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    // open file
    FILE *file = fopen("phonebook.csv", "a");
    
    // get strings from user
    char *name = get_string("name: ");
    char *number = get_string("number: ");
    
    // print(write) strings to file
    fprintf(file, "%s,%s\n", name, number);
    
    // close file
    fclose(file);
}

'ONLINE COURSES > CS50' 카테고리의 다른 글

cs50_strlen( ) // iteration // recursion  (0) 2021.06.02

댓글