CS50x 2024 - Lecture 4 - Memory

00:00:00 - Introduction

00:01:01 - Pixel Art

将从更低的层面来了解计算机的工作原理

00:06:57 - Hexadecimal 16进制

在这里插入图片描述
表示255
使用两个十六进制数字来表示单个字节

00:14:23 - Memory

在这里插入图片描述

00:21:43 - Pointers

指针实际上只是一个地址,某个变量的地址

指针通常使用8个字节,而不仅仅是四个
在这里插入图片描述

#include <stdio.h>
int main() {int n = 50;int *p = &n;printf("%p\n",p);printf("%i\n",*p);
}

如果是8个可以数的更高

00:30:43 - Strings

在这里插入图片描述
string 实际上是char*
几十年前,没有决定创建一个名为string的实际数据类型,字符串实际上只是第一个字符的地址

#include <stdio.h>
int main() {char *s = "hi!";printf("%s\n",s);
}

在cs50的头文件中,有

typedef char *string;

以这种方式使用自定义数据类型

00:48:27 - Pointer Arithmetic

首先引入数组语法,是因为他是语法糖

00:52:05 - String Comparison

#include <stdio.h>
#include <cs50.h>
#include <string.h>int main() {char *s = get_string("s:");char *t = get_string("t:");if(strcmp(s, t) == 0) {printf("same\n");}else {printf("different\n");}
}

01:04:52 - Copying

malloc采用一个参数,即希望为您查找的字节数,并返回该内存块的地址.

如果malloc返回null,则说明没有足够的可用内存

free与malloc相反,用完内存后需要还给操作系统

NULL只是一个地址,实际就是地址零来表示错误

#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>int main() {char* s = get_string("s:");if (s == NULL) {return 1;}char* t = malloc(strlen(s) + 1);if (t == NULL) {return 1;}strcpy(t, s);// for (int i = 0, n = strlen(s); i <= n; i++) {//     t[i] = s[i];// }if (strlen(s) > 0) {t[0] = toupper(t[0]);}printf("%s\n",t);printf("%s\n", s);free(t);return 0;
}

01:16:49 - malloc and Valgrind

valgrind:检查内存的使用情况

01:24:11 - Garbage Values

01:29:10 - Pointer Fun with Blinky

01:32:00 - Swapping

#include <stdio.h>void swap(int* a, int* b);
int main() {int a = 2;int b = 3;printf("before: a = %i, b =%i\n", a, b);swap(&a, &b);printf("after: a = %i, b = %i\n", a, b);return 0;
}void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;
}

在这里插入图片描述
如果按值传递不能成功,要通过引用传递(passing by reference)

01:46:27 - Overflow

01:49:36 - scanf

segmentation fault 分段错误:意味着和内存相关的问题出现了,这些内存段不属于你,没有为其分配空间,例如通过数组甚至通过malloc

02:02:11 - File I/O

在这里插入图片描述

csv文件,是一个轻量级的电子表格

每次函数返回指针时,应该检查它是否为空,如果是,根据文档应该退出

#include <cs50.h>
#include <stdio.h>int main() {FILE* file = fopen("phonebook.csv","a");if (file == NULL) {return 1;}char* name = get_string("Name: ");char* number = get_string("Number: ");fprintf(file, "%s,%s\n", name, number);fclose(file);
}```c
#include <stdio.h>
#include <stdint.h>typedef uint8_t BYTE;
int main(int argc, char* argv[]) {FILE* src = fopen(argv[1], "rb");FILE* dst = fopen(argv[2], "wb");BYTE b;while (fread(&b,sizeof(b), 1, src) != 0) {fwrite(&b, sizeof(b), 1, dst);}fclose (dst);fclose(src);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/466516.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day4.

单链表 #include <head.h>typedef struct List{int value;struct List *pointe; }*list; list create_space() {list s(struct List *)malloc(sizeof(struct List)); //向堆区申请空间s->pointe NULL;//初始化s->value 0;return s; } list inserhead_list(lis…

【ES】--Elasticsearch的分词器详解

目录 一、前言二、分词器原理1、常用分词器2、ik分词器模式3、指定索引的某个字段进行分词测试3.1、采用ts_match_analyzer进行分词3.2、采用standard_analyzer进行分词三、如何调整分词器1、已存在的索引调整分词器2、特别的词语不能被拆开一、前言 最近项目需求,针对客户提…

【Effective Objective - C 2.0】——读书笔记(四)

文章目录 二十三、通过委托与数据源协议进行对象间通信二十四、将类的实现代码分散到便于管理的数个分类之中二十五、总是为第三方的分类名称加前缀二十六、切勿在分类里面声明属性二十七、使用“class-continuation分类”隐藏实现细节二十八、通过协议提供匿名对象 二十三、通…

Hive调优——explain执行计划

一、explain查询计划概述 explain将Hive SQL 语句的实现步骤、依赖关系进行解析&#xff0c;帮助用户理解一条HQL 语句在底层是如何实现数据的查询及处理&#xff0c;通过分析执行计划来达到Hive 调优&#xff0c;数据倾斜排查等目的。 https://cwiki.apache.org/confluence/d…

docker安装、运行

1、安装 之前有docker的话&#xff0c;需要先卸载旧版本&#xff1a; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 安装之前需要安装yum工具&#xff1a; sud…

1.3 Verilog 环境搭建详解教程

学习 Verilog 做仿真时&#xff0c;可选择不同仿真环境。FPGA 开发环境有 Xilinx 公司的 ISE&#xff08;目前已停止更新&#xff09;&#xff0c;VIVADO&#xff1b;因特尔公司的 Quartus II&#xff1b;ASIC 开发环境有 Synopsys 公司的 VCS &#xff1b;很多人也在用 Icarus…

LibreOffice Calc 取消首字母自动大写 (Capitalize first letter of every sentence)

LibreOffice Calc 取消首字母自动大写 [Capitalize first letter of every sentence] 1. Tools -> AutoCorrect Options2. AutoCorrect -> Options -> Capitalize first letter of every sentenceReferences 1. Tools -> AutoCorrect Options 2. AutoCorrect ->…

【Java程序设计】【C00268】基于Springboot的CSGO赛事管理系统(有论文)

基于Springboot的CSGO赛事管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的赛事管理系统 本系统分为系统功能模块、管理员功能模块、参赛战队功能模块以及合作方功能模块。 系统功能模块&#xff1a;在系…

网络协议与攻击模拟_16HTTP协议

1、HTTP协议结构 2、在Windows server去搭建web扫描器 3、分析HTTP协议流量 一、HTTP协议 1、概念 HTTP&#xff08;超文本传输协议&#xff09;用于在万维网服务器上传输超文本&#xff08;HTML&#xff09;到本地浏览器的传输协议 基于TCP/IP(HTML文件、图片、查询结构等&…

LocalAI 部署(主要针对 mac m2 启动)

LocalAI 部署 介绍 LocalAI 是免费的开源 OpenAI 替代方案。 LocalAI 充当 REST API 的直接替代品&#xff0c;与本地推理的 OpenAI API 规范兼容。 它无需 GPU&#xff0c;还有多种用途集成&#xff0c;允许您使用消费级硬件在本地或本地运行 LLM、生成图像、音频等等&#…

第 384 场 LeetCode 周赛题解

A 修改矩阵 模拟 class Solution { public:vector<vector<int>> modifiedMatrix(vector<vector<int>> &matrix) {int m matrix.size(), n matrix[0].size();vector<int> mx(n, INT32_MIN);for (int i 0; i < m; i)for (int j 0; j &l…