C语言学习 12(指针学习1)
一.内存和地址
1.内存
⼀楼:101,102,103...
⼆楼:201,202,203...
...
bit - ⽐特位
Byte - 字节
KB
MB
GB
TB
PB
1Byte = 8bit
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
#include <stdio.h>
int main()
{int a = 10;&a;printf("%p\n", &a);return 0;
} - 每运行一次,存储的地址就会发生一次改变。

#include <stdio.h>
int main()
{int a = 10;int* pa = &a; //取出a的地址,存入指针变量pa中。return 0;
} int a = 10;
int* pa = &a;
char ch = 'A';
char* pc = &ch; 4.解引用操作符(*)
#include <stdio.h>
int main()
{int a = 10;int* pa = &a;*pa = 0;printf("%d", a);return 0;
} 打印结果:

#include <stdio.h>
//指针变量的⼤⼩取决于地址的⼤⼩
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{printf("%zd\n", sizeof(int*));printf("%zd\n", sizeof(short*));printf("%zd\n", sizeof(double*));printf("%zd\n", sizeof(char*));printf("%zd\n", sizeof(float*));return 0;
} x64环境(16进制)打印:

- 32位平台下地址是32个bit位,指针变量⼤⼩是4个字节
- 64位平台下地址是64个bit位,指针变量⼤⼩是8个字节
#include <stdio.h>
int main()
{int a = 0x11223344;int* pa = &a;*pa = 0;return 0;
} 第一段代码的内存改变的情况:

#include <stdio.h>
int main()
{int a = 0x11223344;char* pa = &a;*pa = 0;return 0;
} 第二段代码内存改变情况:

#include <stdio.h>
int main()
{int a = 10;int* pa = &a;char* pc = &a;printf("%p\n", &a);printf("%p\n", pa);printf("%p\n", pc);printf("%p\n", pa + 1);printf("%p\n", pc + 1);return 0;
} 打印结果:

#include <stdio.h>
int main()
{int a = 10;int* pa = &a;char* pc = &a;return 0;
} #include <stdio.h>
int main()
{int a = 10;void* pa = &a;void* pc = &a;*pa = 0;*pc = 0;return 0;
} VS2022编译结果:

- 指针+- 整数
- 指针-指针
- 指针的关系运算
int arr[10] = {1,2,3,4,5,6,7,8,9,10}; 
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = &arr[0];int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){printf("%d ", *(p + i));}return 0;
} 也可以将数组里的数全改为0;
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = &arr[0];int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){*(p + i) = 0;}for (i = 0; i < sz; i++){printf("%d ", *(p + i));}return 0;
} 当然也可以自己输入,但输入的时候就不用加&了。

#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);int* p = &arr[sz - 1];for (i = 0; i < sz; i++){*p = i + 1;p--; //指针向前遍历}for (i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}
2.指针-指针
#include <stdio.h>
int main()
{int arr[10] = { 0 };int n = &arr[9] - &arr[0];printf("%d", n);return 0;
}
打印结果:

#include <stdio.h>size_t my_strlen(char* str)
{int count = 0;while (*str != '\0'){str++;count++;}
}
int main()
{char arr[] = "abcdef";size_t len = my_strlen(arr);printf("%zd", len);return 0;
} 指针-指针形式:
#include <stdio.h>
size_t my_strlen(char* str)
{char* start = str;while (str != '\0'){str++;}return str - start;
}int main()
{char arr[] = "abcdef";size_t len = my_strlen(arr);printf("%zd", len);return 0;
} 3.指针的关系运算
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = &arr[0];int sz = sizeof(arr) / sizeof(arr[0]);while (p < arr + sz){printf("%d ", *p);p++;}return 0;
} 相关文章:
C语言学习 12(指针学习1)
一.内存和地址 1.内存 在讲内存和地址之前,我们想有个⽣活中的案例: 假设有⼀栋宿舍楼,把你放在楼⾥,楼上有100个房间,但是房间没有编号,你的⼀个朋友来找你玩,如果想找到你,就得挨…...
TypeError: issubclass() arg 1 must be a class
TypeError: issubclass() arg 1 must be a class 报错代码: import spacy 原因: 库版本错误, 解决方法: pip install typing-inspect0.8.0 typing_extensions4.5.0 感谢作者: langchain TypeError: issubclass() …...
Java面试题、八股文学习之JVM篇
1.对象一定分配在堆中吗?有没有了解逃逸分析技术? 对象不一定总是分配在堆中。在Java等一些高级编程语言中,对象的分配位置可以通过编译器或运行时系统的优化来决定。其中,逃逸分析(Escape Analysis)是用于…...
【eNSP】动态路由协议RIP和OSPF
动态路由RIP(Routing Information Protocol,路由信息协议)和OSPF(Open Shortest Path First,开放式最短路径优先)是两种常见的动态路由协议,它们各自具有不同的特点和使用场景。本篇会对这两种协…...
春秋云境 CVE 复现
CVE-2022-4230 靶标介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数,这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下,具有管理选项功能 (admin) 的用户可以使用受影响的功能,但是该插件有一个设置允许低权限用…...
Linux入门攻坚——39、Nginx入门
Nginx:engine X Tengine:淘宝改进维护的版本 Registry: 使用了libevent库:高性能的网络库 epoll()函数 Nginx特性: 模块化设计、较好的扩展性;(但不支持动态加载模块功能&#…...
计算机网络的类型
目录 按覆盖范围分类 个人区域网(PAN) 局域网(LAN) 城域网(MAN) 4. 广域网(WAN) 按使用场景和性质分类 公网(全球网络) 外网 内网(私有网…...
解决 MySQL 5.7 安装中的常见问题及解决方案
目录 前言1. 安装MySQL 5.7时的常见错误分析1.1 错误原因及表现1.2 错误的根源 2. 解决方案2.1 修改YUM仓库配置2.2 重新尝试安装2.3 处理GPG密钥错误2.4 解决依赖包问题 3. 安装成功后的配置3.1 启动MySQL服务3.2 获取临时密码3.3 修改root密码 4. 结语 前言 在Linux服务器上…...
VITE+VUE3+TS环境搭建
前言(与搭建项目无关): 可以安装一个node管理工具,比如nvm,这样可以顺畅的切换vue2和vue3项目,以免出现项目跑不起来的窘境。我使用的nvm,当前node 22.11.0 目录 搭建项目 添加状态管理库&…...
【设计模式】【创建型模式(Creational Patterns)】之原型模式(Prototype Pattern)
1. 设计模式原理说明 原型模式(Prototype Pattern) 是一种创建型设计模式,它允许你通过复制现有对象来创建新对象,而无需通过构造函数来创建。这种方式可以提高性能,尤其是在对象初始化需要消耗大量资源或耗时较长的情…...
黄仁勋:人形机器人在内,仅有三种机器人有望实现大规模生产
11月23日,芯片巨头、AI时代“卖铲人”和最大受益者、全球市值最高【英伟达】创始人兼CEO黄仁勋在香港科技大学被授予工程学荣誉博士学位;并与香港科技大学校董会主席沈向洋展开深刻对话,涉及人工智能(AI)、计算力、领导…...
【C语言】宏定义详解
C语言中的宏定义(#define)详细解析 在C语言中,宏定义是一种预处理指令,使用 #define 关键字定义。它由预处理器(Preprocessor)在编译前处理,用于定义常量、代码片段或函数样式的代码替换。宏是…...
LangChain——多向量检索器
每个文档存储多个向量通常是有益的。在许多用例中,这是有益的。 LangChain 有一个基础 MultiVectorRetriever ,这使得查询此类设置变得容易。很多复杂性在于如何为每个文档创建多个向量。本笔记本涵盖了创建这些向量和使用 MultiVectorRetriever 的一些常…...
《岩石学报》
本刊主要报道有关岩石学基础理论的岩石学领域各学科包括岩浆岩石学、变质岩石学、沉积岩石学、岩石大地构造学、岩石同位素年代学和同位素地球化学、岩石成矿学、造岩矿物学等方面的重要基础理论和应用研究成果,同时也刊载综述性文章、问题讨论、学术动态以及书评等…...
数据结构 (12)串的存储实现
一、顺序存储结构 顺序存储结构是用一组连续的存储单元来存储串中的字符序列。这种存储方式类似于线性表的顺序存储结构,但串的存储对象仅限于字符。顺序存储结构又可以分为定长顺序存储和堆分配存储两种方式。 定长顺序存储: 使用静态数组存储ÿ…...
职场发展陷阱
一、只有执行,没有思考 二、只有过程,没有结果 三、只有重复,没有精进 四、不懂向上管理 五、定期汇报 六、不要憋大招 七、多同步信息...
Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃
0x00 启动崩溃 崩溃日志,只有 2 行,看不出啥来。 0x01 默认配置 由于我开发时,使用的 Xcode 14.1,打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【二】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
PVE相关名词通俗表述方式———多处细节实验(方便理解)
PVE设置初期,对CIDR、 网关、 LinuxBridge、VLAN等很有困惑的朋友一定很需要一篇能够全面通俗易懂的方式去理解PVE 中Linux网桥的工作方式,就像操作一个英雄,多个技能,还是需要一点点去学习理解的,如果你上来就对着别人…...
Ansible--自动化运维工具
Ansible自动化运维工具介绍 1.Ansible介绍 Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...
【技巧】dify前端源代码修改第一弹-增加tab页
回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码,在知识库增加一个tab页"HELLO WORLD",完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...
运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.
报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符,最后运行:npm run lint --fix...
LeetCode 0386.字典序排数:细心总结条件
【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...
解决MybatisPlus使用Druid1.2.11连接池查询PG数据库报Merge sql error的一种办法
目录 前言 一、问题重现 1、环境说明 2、重现步骤 3、错误信息 二、关于LATERAL 1、Lateral作用场景 2、在四至场景中使用 三、问题解决之道 1、源码追踪 2、关闭sql合并 3、改写处理SQL 四、总结 前言 在博客:【写在创作纪念日】基于SpringBoot和PostG…...
Qt/C++学习系列之列表使用记录
Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件,同步使用QTableWidgetItem进行单元格的设置,最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...
从0开始一篇文章学习Nginx
Nginx服务 HTTP介绍 ## HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 ## HTTP工作在 TCP/IP协议体系中的TCP协议上&#…...
