22.03.17メモリ
7000 ワード
メモリアドレス
#include <stdio.h>
int main(void)
{
int n = 50;
int *p = &n;
printf("%p\n", p);
printf("%i\n", *p);
}
文字列(String)
#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
int main(void)
{
string s = get_string("s: ");
string t = s;
t[0] = toupper(t[0]);
printf("s: %s\n", s);
printf("t: %s\n", t);
}
#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
#include <string.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++)
{
t[i] = s[i];
}
t[0] = toupper(t[0]);
printf("s: %s\n", s);
printf("t: %s\n", t);
}
メモリの割り当てと無効化
char *t = malloc(strlen(s) + 1);
int *x = malloc(10 * sizeof(int));
x[10] = 0; // Buffer overflow에 해당함.
メモリ交換、Stack、Heap
メモリにはデータストアがあります.
#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;
}
#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); // x, y의 메모리 주소를 넘겨줌
printf("x is %i, y is %i\n", x, y);
}
void swap(int *a, int *b) // 넘겨받은 주소를 a와 b에 저장
{
int tmp = *a; // a 주소에 저장된 값을 *로 불러와서 tmp에 저장
*a = *b; // a 주소에 저장된 값을 b 주소에 저장된 값으로 변경
*b = tmp; // b 주소에 저장된 값을 tmp 값으로 변경
}
ファイルの読み込み、書き込み
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
// Open file : FILE 이라는 새로운 자료형을 가리키는 포인터 변수 file
FILE *file = fopen("phonebook.csv", "a"); // 파일 내용 저장 csv : comma seperated value
// 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);
}
Reference
この問題について(22.03.17メモリ), 我々は、より多くの情報をここで見つけました https://velog.io/@kimsy8979/22.03.17-메모리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol