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 |
---|
댓글