C语言-009
一、sizeof 运算符sizeof 是运算符用于获取某个类型或变量在内存中占据的字节数。用法sizeof(int)sizeof(i)结果在编译期就已确定括号内的运算不会执行。二、取地址运算符 scanf(%d, i);中的作用获取变量的内存地址。操作数必须是变量不能对表达式、临时值取地址。不能取地址的情况(ab)(a)(a)地址输出格式printf(%p, i);地址大小与 int 是否相同取决于编译器与系统。三、指针基础1. 指针是什么指针就是保存地址的变量。普通变量存实际值指针变量存变量的地址。2. 指针定义c运行int i; int *p i; // p 是指针保存 i 的地址int* p, q;→ p 是指针q 是普通 intint *p, q;→ 含义同上写法更清晰3. 访问指针所指变量* 运算符*是单目运算符用来访问指针地址上的变量。可做右值可做左值。c运行int k *p; // 取出 p 指向的值给 k *p k 1; // 修改 p 指向的变量的值4. 指针作为函数参数函数可以通过指针访问、修改外部变量。c运行void f(int *p); int i 0; f(i); // 把 i 的地址传进去四、指针的典型应用场景场景 1函数返回多个值c运行void minmax(int a[], int len, int *min, int *max); int main(void) { int a[] {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55}; int min, max; minmax(a, sizeof(a)/sizeof(a[0]), min, max); printf(min%d, max%d\n, min, max); return 0; } void minmax(int a[], int len, int *min, int *max) { int i; *min *max a[0]; for(i1; ilen; i){ if(a[i] *min) *min a[i]; if(a[i] *max) *max a[i]; } }场景 2函数返回状态结果用指针带出c运行#include stdio.h // 返回1表示除法成功0表示失败 int divide(int a, int b, int *result); int main(void) { int a5, b2, c; if(divide(a,b,c)){ printf(%d\n, c); } return 0; } int divide(int a, int b, int *result) { if(b 0) return 0; *result a / b; return 1; }五、数组与指针的关系1. 函数里的数组参数本质是指针函数参数表中int a[]等价于int *asizeof(a)sizeof(int*)但依然可以用[]访问元素。2. 数组变量是特殊指针数组名本身代表首元素地址c运行int a[10]; int *p a; // 不用 a a[0][]可用于指针p[0]等价于a[0]*可用于数组*a 25等价于a[0] 25数组变量是 const 指针不能被赋值a NULL;错误等价int *const a ...六、指针与 const1. 判断规则const 在 * 前面指针指向的值不能改const 在 * 后面指针本身的地址不能改2. 三种写法c运行const int *p1 i; // 指向的值不能改 int const *p2 i; // 同上 int *const p3 i; // 指针本身不能改指向3. 指针是 constc运行int *const q i; *q 26; // OK q; // ERROR4. 所指是 constc运行const int *p i; *p 26; // ERROR i 26; // OK p j; // OK5. const 数组c运行const int a[] {1,2,3,4,5,6};数组每个单元都是const int只能初始化不能赋值。七、指针运算1. 指针 ± 整数指针 1 →指向下一个同类型变量不是简单地址 1。c运行int a[10]; int *p a; *(p1) a[1]2. 常用简写*p先取*p的值再把p指向下一个。效率极高常用于遍历数组。3. 指针比较, , , , , !都可使用。比较的是内存地址大小。4. 0 地址 / NULL0 地址通常不可访问用来表示无效指针。用NULL表示 0 地址更规范。八、指针类型所有指针大小相同都是地址。不同类型指针不能直接互相赋值。void*表示未知类型指针可接收任意类型地址。c运行int *p i; void *q (void*)p;九、动态内存分配 malloc /free1. mallocc运行#include stdlib.h void *malloc(size_t size);向系统申请连续字节的堆空间。返回void*需强转为需要的类型。示例(int*)malloc(n * sizeof(int))2. freec运行free(指针);把 malloc 申请的空间还给系统。必须传申请时返回的首地址。申请过的空间必须释放避免内存泄漏。3. 申请失败空间不足时返回NULL。十、指针核心总结取地址*访问指针指向的值。指针是保存地址的变量函数可用指针修改外部变量。数组参数本质是指针数组名是首地址。const 在 * 前限制值在 * 后限制指针本身。指针 1 是移动到下一个同类型变量。malloc 申请堆内存free 必须成对使用。

相关新闻

Dify LLM-as-a-judge评估体系落地实录:从零搭建高信效度自动化评测流水线(含7个可复用Prompt模板)

Dify LLM-as-a-judge评估体系落地实录:从零搭建高信效度自动化评测流水线(含7个可复用Prompt模板)

第一章:Dify LLM-as-a-judge评估体系落地实录:从零搭建高信效度自动化评测流水线(含7个可复用Prompt模板)为什么需要LLM-as-a-judge在Dify中落地 传统人工评估耗时长、成本高、一致性差,而Dify平台原生支持自定义评估工…

2026/7/5 14:08:39 阅读更多 →
AI浪潮下Java企业系统改造:AIGS范式与技术专注方向

AI浪潮下Java企业系统改造:AIGS范式与技术专注方向

在企业级软件开发领域,Java长期占据核心地位,承载着无数企业的核心业务系统,其稳定性、可扩展性早已得到行业验证。但随着大模型与生成式AI技术的快速普及,存量Java系统如何低成本、低风险接入AI能力,实现技术升级与业…

2026/7/5 14:08:30 阅读更多 →
保姆级教程:Fish Speech 1.5一键部署,3步生成高质量语音

保姆级教程:Fish Speech 1.5一键部署,3步生成高质量语音

保姆级教程:Fish Speech 1.5一键部署,3步生成高质量语音 想不想体验一下,只用一段文字和几十秒的录音,就能生成一个听起来像真人说话的声音?不是那种冷冰冰的电子音,而是有语气、有停顿、甚至带点呼吸感的…

2026/7/3 22:55:15 阅读更多 →

最新新闻

Windows系统优化新选择:Winhance中文版如何让电脑重获新生?

Windows系统优化新选择:Winhance中文版如何让电脑重获新生?

Windows系统优化新选择:Winhance中文版如何让电脑重获新生? 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirror…

2026/7/5 14:08:17 阅读更多 →
Leetcode新动循环嵌套之数组异或操作、好数对的数目、统计好三元组

Leetcode新动循环嵌套之数组异或操作、好数对的数目、统计好三元组

1486.数组异或操作class Solution:def xorOperation(self, n: int, start: int) -> int:nums []for i in range(n):nums.append(start 2*i)resultnums[0]for i in range(1,n):result ^ nums[i]return result1512.好数对的数目class Solution:def numIdenticalPairs(self,…

2026/7/5 14:06:16 阅读更多 →
[特殊字符] Oracle EBS 中国客户(校正版)华为确实是 Oracle EBS 的老客户,不是 SAP。时间线先给你对齐:华为 1996 年引入 MRP Ⅱ,之后 20 多年核心 ERP 是

[特殊字符] Oracle EBS 中国客户(校正版)华为确实是 Oracle EBS 的老客户,不是 SAP。时间线先给你对齐:华为 1996 年引入 MRP Ⅱ,之后 20 多年核心 ERP 是

🟢 Oracle EBS 中国客户(校正版)华为确实是 Oracle EBS 的老客户,不是 SAP。时间线先给你对齐:华为 1996 年引入 MRP Ⅱ,之后 20 多年核心 ERP 是 Oracle EBS,支撑全球 170 国家、每年数千亿产值…

2026/7/5 14:06:16 阅读更多 →
HiveWE终极指南:如何快速创建魔兽争霸III地图的完整教程

HiveWE终极指南:如何快速创建魔兽争霸III地图的完整教程

HiveWE终极指南:如何快速创建魔兽争霸III地图的完整教程 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 你是否曾经因为魔兽争霸III原版地图编辑器的卡顿而失去创作热情?是否在复杂的…

2026/7/5 14:02:16 阅读更多 →
HarmonyOS ArkTS 实战:实现一个校园食堂排队取餐记录应用

HarmonyOS ArkTS 实战:实现一个校园食堂排队取餐记录应用

项目效果 本文实现一个基于 HarmonyOS 和 ArkTS 的校园食堂排队取餐记录应用。应用可以记录不同食堂窗口的排队时间、用餐时段和口味评价,并支持取餐状态切换、推荐窗口筛选、长队统计和平均等待时间统计。 最终运行效果如下:页面功能包括: 记…

2026/7/5 14:00:15 阅读更多 →
Kimi    LeetCode 3464. 正方形上的点之间的最大距离 Python3实现

Kimi LeetCode 3464. 正方形上的点之间的最大距离 Python3实现

LeetCode 3464. 正方形上的点之间的最大距离 — Python3 实现题目概述给定正方形边长 side,以及位于正方形边界上的若干点。需要从中选出 k 个点,使得任意两点之间的最小曼哈顿距离最大化。- 曼哈顿距离:|x1 - x2| |y1 - y2| - 关键约束&…

2026/7/5 14:00:15 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻