新闻详情

新闻详情

首页 / 资讯中心 / 详情

指针运算快问快答:Coursebook 20道经典例题与解答

发布时间:2026/10/1 17:14:15来源:尧图网络
指针运算快问快答:Coursebook 20道经典例题与解答
指针运算快问快答Coursebook 20道经典例题与解答【免费下载链接】coursebookOpen Source Introductory Systems Programming Textbook for the University of Illinois项目地址: https://gitcode.com/GitHub_Trending/co/coursebook指针运算是 C 语言学习中最容易踩坑的部分之一。本文精选开源教材 Coursebook伊利诺伊大学开源系统编程教程中的 20 道经典指针运算例题并逐一给出解答覆盖指针声明、指针算术、void 指针、const 修饰、字符串与常见 bug。读完这篇指针运算快问快答指南你基本可以掌握 C 语言指针的核心规则 题目均改编自 introc/pointers.tex、introc/introc.tex、introc/common_bugs.tex 等章节的真实教学内容。一、声明与基础操作Q1–Q5Q1int* ptr3, ptr4;声明了几个指针答只有 1 个。*只修饰ptr3ptr4是普通 int 变量。正确写法是int *ptr3, *ptr4;——这是 Coursebook 明确指出的common gotcha。Q2*ptr 0;ptr 指向 0x1000类型为int*会写多少字节答4 字节。解引用写入的是sizeof(int)个字节即 0x1000~0x1003 全置零。写入大小由指针类型决定不是 1 字节。Q3int *ptr;中sizeof(ptr)和sizeof(*ptr)各是多少答8 和 464 位系统。ptr是指针本身8 字节地址*ptr是被指向的 int4 字节。两者含义完全不同见 introc/introc.tex。Q4char ary[] Hello; ary World;能编译吗答不能。数组名不是指针永远绑定原内存块不能被重新赋值。而ptr Worldptr 为char*完全合法。Q5char *ptr Hello; strcpy(ptr, World);会怎样答段错误Segfault。字符串字面量存在只读数据段ptr可以改指向但它指向的内容不可写见 introc/c_memory_model.tex。二、指针算术核心Q6–Q10Q6char *ptr Hello; ptr 2;后 ptr 指向谁答第一个 l。char 永远 1 字节 2就是移动 2 字节。Q7char *ptr ABCDEFGH; int *bna (int*)ptr; bna 1;再转回 char* 打印什么答EFGH。int 指针 1 移动 4 字节大多数系统跳过了 ABCD。C 语言的指针算术自动按指向类型大小缩放。Q8int *offset ptr1 4;等价于哪种字节级写法答char *t (char*)ptr1; int *offset (int*)(t sizeof(int)*4);即移动 16 字节。Coursebook 强调每次做指针运算深呼吸确认你移动的字节数是你以为的那个。Q9int *p;依次做p1、p2、p-1各移动多少字节答4、8、-4。记住公式移动字节数 偏移量 × sizeof(指向类型)。Q10char** ptr malloc(10); ptr[0] malloc(20);之后ptr1指向哪里答ptr 地址 8 处指针大小 8 字节不是 1 字节。这也是为什么 malloc 返回void*后要先转成具体类型才能做算术。三、void 指针与 const 修饰Q11–Q14Q11void *give_me_space malloc(10); char *string give_me_space;为什么要转答其实不用。ISO C 规定void*可自动提升为任意指针类型malloc 返回 void* 正是为此设计的。Q12对void*做算术运算合法吗答ISO C 禁止类型未知就无法缩放但 gcc/clang 会当char*处理——不要依赖这个行为不可移植。Q13const char *str和char *const str有何区别答前者是指向常量字符串的可变指针后者是指向可变字符串的常量指针。判断技巧从*往哪边读 const哪边就是常量。Q14const int i 0;之后能改吗答编译器层面禁止直接改但(*((int*)i)) 1;这类指针绕路可以绕过——const 只是编译器约束不是硬件写保护见 introc/language_facilities.tex。四、字符串与二级指针Q15–Q17Q15两个相同的字符串字面量一定在两个地址吗答不一定。char *str1 Mark Twain likes books; char *str2 Mark Twain likes books;两者可能共享同一段只读内存。而char arr1[] ...数组形式各自持有独立副本。Q16ABC这个字符串需要多少字节答4 字节。别忘了结尾的 NUL 终止符。由此推出经典结论strdup类函数必须malloc(strlen(s) 1)。Q17char**指针数组中ptr[0]4和ptr4差多远答一个移动 4 字节第一层 char指向的字符区一个移动 32 字节4 个 8 字节指针。* 二级指针的层级决定缩放系数逐层算sizeof。五、经典 Bug 案例Q18–Q20Q18手写 strcpy 时dest src和*dest *src哪个对答*dest *src。前者只是让 dest 指针重新指向源串内容一个字节都没拷还丢了 NUL 处理。完整讨论见 introc/common_bugs.tex。Q19user_t *user malloc(sizeof(user));错在哪答分配了 8 字节的指针空间而不是sizeof(user_t)的 100 字节结构体空间。一旦写入user-name立即内存越界。同理还有 double free 后继续写指针悬垂指针两大事故。Q20函数内return local_var;合法吗答不合法。自动变量只活在栈上函数生命周期内返回其地址就是悬垂指针static变量例外因为它不在栈上。总结指针运算 3 条黄金法则缩放法则ptr n移动n × sizeof(指向类型)字节void*例外不可算术。层级法则每多一级*缩放基数多翻一倍逐层确认。终止法则字符串永远需要1字节的 NULfree 之后立刻把指针置 NULL。Coursebook 用这 20 道快问快答式的短题覆盖了 C 语言指针的全部高频考点配合 introc/ 章节的原书讲解非常适合初学者自测。祝你一次通关【免费下载链接】coursebookOpen Source Introductory Systems Programming Textbook for the University of Illinois项目地址: https://gitcode.com/GitHub_Trending/co/coursebook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

054振荡排序 2026/10/1 18:45:45

054振荡排序

振荡排序 (Oscillating Sort / Reversing Merge) 054钟摆算法:解码振荡排序故事:钟摆的节拍 在磁带机时代,有一个令工程师头疼的问题:磁带倒带很慢。每次排序合并之后,都要把磁带倒回起始位置,才能进行下一…

阅读更多 →
055胜者树 2026/10/1 18:45:45

055胜者树

胜者树/败者树(Tournament Tree)— 外排序的核心引擎 055胜者树:从体育锦标赛到大数据引擎5W1H 发明者故事 Who(何人)- 发明者是谁? 发明者:竞标赛排序(Tournament Sort&#xff0…

阅读更多 →
管道缺陷检测数据集实战:1000张标注图训练YOLO模型全流程 2026/10/1 18:45:39

管道缺陷检测数据集实战:1000张标注图训练YOLO模型全流程

简介:这份数据集面向使用YOLO系列模型进行工业管道缺陷检测的学习者与研究者,覆盖裂纹、孔洞、屈曲、碎片四类常见缺陷,可用于目标检测模型的训练、验证与效果对比。数据已预先划分为训练集、验证集与测试集,并附带data.yaml配置文…

阅读更多 →
FPGA器件编程从比特流生成到Flash固化的完整实践指南 2026/10/1 18:45:32

FPGA器件编程从比特流生成到Flash固化的完整实践指南

用 Vivado 做器件编程,说白了就是把综合实现后生成的比特流文件,通过 JTAG 下载到 FPGA 芯片里,让电路真正跑起来。很多人卡在这一步:比特流明明生成了,硬件管理器里却看不到板卡;或者下载成功,…

阅读更多 →
Agent记忆系统实战:基于MCP与hindsight的事后复盘机制设计 2026/10/1 18:45:32

Agent记忆系统实战:基于MCP与hindsight的事后复盘机制设计

1. 为什么“事后复盘”这件事值得单独做成一个Agent做过Agent开发的人都有一个共同的痛:会话一关,记忆归零。用户昨天跟你聊了半小时的业务流程,今天再打开,Agent像个失忆的实习生,一切从头问起。更麻烦的是&#xff0…

阅读更多 →
克莱诺趋势跟踪策略实战:双均线信号、ATR定仓与多市场分散 2026/10/1 18:45:32

克莱诺趋势跟踪策略实战:双均线信号、ATR定仓与多市场分散

第一次真正把安德烈亚斯克莱诺(Andreas Clenow)这套趋势跟踪策略落到实盘,是好几年前的事了。当时一个做商品期货的朋友把回测报告拍在我面前,资金曲线几乎是四十五度上扬,然后他苦笑着说:"报告好看&a…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉