C语言指针要详细了解有啥好的资料提供吗
指针是C语言中一个比较重要的概念,重要到你一定要去学习学习。指针又是C语言中一个比较抽象的概念,抽象到你又学不好。所以你看,矛盾了吧?不过这不怪你,我认为很多教材没写好。你想,指针这么抽象的东西,你还要用抽象的教法,能把人教懂吗?
我就回答下题主一个问题吧,就是指针该如何理解。我曾经写过这方面的文章,推荐两篇:
从5个维度来看C语言指针(指针就是个纸老虎)
C语言指针专题——如何理解指针
其中第一篇建议题主看看。我把指针的属性总结了下,就是“两己三他”,展开来说,就是:己址、己值、他值、他址、他型。
大概来说:
己址:就是自己的地址的意思。就是指针变量也有自己的地址;
己值:就是自己的数据值的意思。就是指针变量也有自己的数据值;
他址:就是他人的地址的意思。指针变量的己值,其实就是他人的地址;
他值;就是他人的数据值的意思。指针变量的己值是他人的地址,那么就可以通过指针变量获取到他人的数据值;
【C语言指针要详细了解有啥好的资料提供吗】 他型:就是他人的类型。你以为声明指针变量时的类型,是指指针吗?你错啦!
我估计很多不理解指针的人,都是卡在“己值”和“他值”这两个维度上。
题主有兴趣,可以关注我的微信公众号“C语言编程技术分享”或者扫描我头像关注我,会有C语言编程相关文章分享!
■网友
c的指针的使用是入门级的,不需要教材
多练习练习就可以了
■网友
去看the c program language之类的经典书籍,指针就不会混乱,我一直认为很多人搞不清指针就是因为谭浩强的书导致的。
本渣渣认为指针最需要掌握精通的分别是
1.函数指针是什么,什么情况下使用它2.如何看出一个表达式中指针到底指向了什么类型关于第一点,本渣渣无能为力,只能说多看看书吧,简单地说就是可以用来做回调响应,把函数当做一个变量进行使用,在嵌入式等领域广泛使用。The c那本书的排序例子里面对函数指针的使用有十分详细的例子,把排序中的比较这个概念抽象出来,当做一种策略变量,传入函数中,这个策略变量就是函数指针。
关于第二点,本渣渣在平日的学习中总结了一个机械化的指针类型推演笨算法,成功率基本达到90%,当然我是基于C++的类型系统认的,c语言我没太系统学过,对c语言的语法规则不是太了解,不知道c和c++的区别也许可能存在一些错误请见谅。
首先做四个约定:
约定1 我们把指向某种类型T的指针书写成(=\u0026gt;T)的形式;约定2 变量的定义表达式用{}包裹起来。约定3 把指向某个T类型的指针表述为=\u0026gt;T的形式约定4 如果有某个携带const关键字的变量p满足 (const p)的类型是=\u0026gt;T,那么就代表p是一个指向T类型对象的常量型指针确定类型过程中使用了这样一个算法,定义是result_expr=RecognizeExpr(expr),expr为一个带有*号和变量名的变量声明表达式,返回值result_expr是一个表达式,注意这个表达式中任何一个*号都不和变量名位于相同的括号嵌套层之中(用这么饶舌的说法表述的原因在后面一个小bug的讨论部分会详细给出),变量的类型推导结果为type(result_expr)
type是一个对RecognizeExpr函数推导得出的表达式内部的变量名进行真实类型提取函数,其演算规则为
{T a} ----\u0026gt; T{Ret f(T1, T2)} ----\u0026gt; Ret(T1, T2) 这里的类型这个指的是输入为T1 T2类型返回为Ret类型的函数T a -----\u0026gt; T 这里的类型是T的数组T可以为任意一种满足C++语言语法的类型(包含const限定符等等)于是定义expr中p变量的类型就是(=\u0026gt;type(result_expr)),这个类型的含义是指向了type(result_expr)这种类型名字
result_expr=RecognizeExpr(expr)的算法流程如下
推荐阅读
- OC为何跌出语言榜前十
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 人民车市|新语言、新起点,捷达VS7 强势入局
- C语言 指针引用数组的地址问题
- 零基础入门学习啥语言好
- 营销型外贸网站用哪种建站程序和语言比较好呢主要是适合优化,可扩展兼容性,安全性,后期网站扩展升级
- 花生|血压高的人,吃花生是降血压还是升血压?医生详细做出解答
- 有哪些轻易就被识别的淘宝刷单评论语言
- 国内自主品牌|红旗H9用谁的发动机?详细拆解之后,请正视国产的实力
- C语言指数函数代码
