朝花夕拾-C语言指针定义和数组定义的歧义问题-指针和数组疑难辩证-终极解答1
=
=
=
选择题(提示:答案只有一个):
int *p = 100;
到底是下面哪个呢?
答案A: (int *) p
答案B: int (*p)
答案是B。
一定要分清楚指针定义和变量类型的关系。
指针定义的方式是在普通定义方法的变量名前加*。
普通定义的方式为:int i;
指针定义的方式为:在变量名前加*,例如:int *p;
变量类型是指一个变量的类型,比如上面的i的变量类型是:int。p的变量类型是:(int *)。
可以看出这里最不适应的是一个变量类型居然有两个符号(甚至更多)表示,这种特点是需要适应的,尤其是从java等高级语言过来的。
下面到底哪个是数组指针,哪个是指针数组呢:
A)
int *p1[10];
B)
int (*p2)[10];
这个问题迷惑的关键点在于c语言设计之初的迭代改进,或者回望迭代之初设计者没有设计好。
数组类型的定义,本来就应该参考高级语言的方式,使用这种方式定义:int[] a; 或者 int[10] a;
//这种方式的好处是显示了真实情况,变量是a,明显是指针性质的。变量类型是int[],int[10]。
但是教科书都用这种方式定义:int a[10];
//这种方式太糟糕,掩盖了变量的本质和类型。初学者还以为变量类型是int,只不过是个数组而已。
小结:
[]或者[10]本来应该跟类型放在一起,而不是跟变量参合在一起。
等价于[]或则[10]应该提前到变量前面。
int a[10] 应该换成 int[10] a;
int *p[10]应该换成什么?应该换成int *[10] p;本来应该换成这样的。
好了,返回来解决上面的问题。
1 借鉴一下数学概念,变量替换。
2 符号之间的优先级:()
> []
> *
。
A)
int *p1[10];
解放方法1:
因为[]优先级比*高,所以上面的题目改为:int *(p1[10])
变量替换:int *X;//这个定义我们太熟悉了,定义了一个变量X,X是个指针类型,也就是int *类型。
那么X==p1[10]是个数组,意思是数组的每个元素都是指针了。
解决方法2:
移动[],int *p1[10]应该换成什么?应该换成int *[10] p1;本来应该换成这样的。
p1的类型是什么:int *[10]
B)
int (*p2)[10];
这个问题怎么解决?
解放方法:变量替换+移动括号。
int (*p2)[10]; 等价于 int X[10] 等价于 int[10] X 等价于int[10] (*p2)
int[10] (*p2)是什么意思?一个int[10]数组,p2是个指针,指向这个数组。
p2的类型是什么?int[10] *
小结:
C语言在设计之初没有设计好,导致后期迭代改进后,没有彻底修改编译器和形式逻辑。
导致了一些问题。
本来应该用int[10] a; 可是用成了int[10] a;
本来应该用 (int *) p; 可是用成了int (*p);
也可能不对,多多提意见。
为了看看最近的编译器,是不是可以按照我理解的最好方式进行识别和编译,试了试,不行啊。
#include <stdio.h> int main(void){ int (*p); int i = 10; p = &i; printf("p=%d \n", *p); }
如果改成 (int *) p就会报错:
$ gcc prac_point.c
prac_point.c: In function ‘main’:
prac_point.c:4: error: ‘p’ undeclared (first use in this function)
prac_point.c:4: error: (Each undeclared identifier is reported only once
prac_point.c:4: error: for each function it appears in.)
=
=
=
相关推荐
"Groovy-朝花夕拾-mht.rar"这个压缩包文件包含的是关于Groovy的学习资料,特别提到了Grails框架的学习内容,以及以MHT(单一文件网页)格式呈现的资料。 Groovy语言的特点: 1. **简洁语法**:Groovy的语法比Java更...
《朝花夕拾》作为中国现代文学巨匠鲁迅先生的一部经典散文集,长久以来吸引了无数读者与研究者的目光。通过对这部作品细致入微的分析,我们不仅能窥探到作者深邃的思想,更能体会到那个时代社会文化的脉动。这本著作...
《朝花夕拾》作为鲁迅先生的回忆性散文集,以其独特的文学价值和深刻的思想内涵,成为了中国现代文学史上不可或缺的一页。这部作品不仅承载着鲁迅对个人过往生活的深情回顾,而且反映出作者对于所处时代的敏锐观察和...
这个“朝花夕拾-改良版”是一个特定的Python项目,旨在提供这样的功能,尤其强调对Word、Excel和纯文本文件的支持。然而,值得注意的是,该版本对于图片的处理需要手动操作,且不支持PDF格式的文件。 在Python中...
《朝花夕拾》是鲁迅先生于1926年创作的一部回忆性散文集,原名为《旧事重提》,其后改为现名,并首次发表于《莽原》半月刊上。鲁迅,作为中国现代文学的奠基人,其作品在小说、散文、诗歌和杂文等诸多体裁领域均有...
1. **鲁迅与《朝花夕拾》** 鲁迅,原名周树人,是中国现代文学的开创者之一,他的作品往往以深刻的批判精神和独特的艺术风格著称。《朝花夕拾》创作于1926年至1927年,当时鲁迅已经是一位备受敬仰的作家。作品中,...
1朝花夕拾-压缩——学习ppt课件
他的作品《朝花夕拾》,不仅是一部个人成长史的书写,更是一幅晚清至民国初期社会风貌的画卷,透过作者的个人经历折射出时代的变迁。 《朝花夕拾》由十篇散文组成,每一篇都是鲁迅对其生命中重要时刻的细腻描绘。他...
朝花夕拾阅读汇报课.ppt
《朝花夕拾》是鲁迅先生的一部经典散文集,这些散文以作者的记忆为线索,生动地再现了作者童年的生活和成长经历。这本集子中收录的10篇文章,每篇都蕴含了鲁迅先生对传统文化、社会现象、人物命运等方面的深刻洞察与...
《朝花夕拾》是鲁迅先生的一部散文集,收录了他回忆童年、少年和青年时期经历的文章。这部作品以其独特的艺术风格和深刻的思想内涵,成为了中国现代文学的经典之作。 在《朝花夕拾》中,我们可以看到鲁迅先生对童年...
《朝花夕拾》是鲁迅先生于1926年创作的一部回忆性散文集,共收录了十篇文章,包括《从百草园到三味书屋》、《阿长与<山海经>》等,这些文章反映了鲁迅先生的童年生活和成长历程,同时也揭示了封建社会的各种问题。...
朝花夕拾鲁迅作品读书感受.pdf
根据提供的文档信息,这里主要涉及的是鲁迅先生的散文集《朝花夕拾》以及不同读者对其的读后感。尽管标签部分标注了“安全管理”,但从上下文来看,这部分内容显然与《朝花夕拾》及其读后感有关,与IT或安全管理领域...
1. **《朝花夕拾》的内容**:这部作品包括《从百草园到三味书屋》和《阿长与<山海经>》等篇目,鲁迅通过这些文章回顾了自己的童年、少年时代,以及在日本留学的经历。 2. **封建孝道的批判**:在《二十四孝图》中,...
《朝花夕拾》读书汇报会主持稿.doc
2021年朝花夕拾读后感1500优秀.pdf
《朝花夕拾》中考试题答案知识梳理.pdf
【朝花夕拾练习题答案】的文档涵盖了鲁迅先生及其代表作《朝花夕拾》的相关知识。以下是根据文档内容生成的知识点详细说明: 1. 鲁迅是中国现代伟大的文学家、思想家和革命家,原名周树人,字豫才,籍贯为浙江绍兴...
《朝花夕拾》知识点测试题及答案精练.doc