`
fantaxy025025
  • 浏览: 1327954 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

朝花夕拾-C语言指针定义和数组定义的歧义问题-指针和数组疑难辩证-终极解答1

 
阅读更多

朝花夕拾-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-朝花夕拾-mht.rar"这个压缩包文件包含的是关于Groovy的学习资料,特别提到了Grails框架的学习内容,以及以MHT(单一文件网页)格式呈现的资料。 Groovy语言的特点: 1. **简洁语法**:Groovy的语法比Java更...

    朝花夕拾-参考答案2015.ppt

    《朝花夕拾》作为中国现代文学巨匠鲁迅先生的一部经典散文集,长久以来吸引了无数读者与研究者的目光。通过对这部作品细致入微的分析,我们不仅能窥探到作者深邃的思想,更能体会到那个时代社会文化的脉动。这本著作...

    朝花夕拾-相关习题.docx

    《朝花夕拾》作为鲁迅先生的回忆性散文集,以其独特的文学价值和深刻的思想内涵,成为了中国现代文学史上不可或缺的一页。这部作品不仅承载着鲁迅对个人过往生活的深情回顾,而且反映出作者对于所处时代的敏锐观察和...

    python云打印实现-朝花夕拾-改良版(可以下载)支持word、excel、文本 ;图片能打开需要手动、不支持pdf

    这个“朝花夕拾-改良版”是一个特定的Python项目,旨在提供这样的功能,尤其强调对Word、Excel和纯文本文件的支持。然而,值得注意的是,该版本对于图片的处理需要手动操作,且不支持PDF格式的文件。 在Python中...

    名著导读《朝花夕拾》ppt课件PPT课件.pptx

    《朝花夕拾》是鲁迅先生于1926年创作的一部回忆性散文集,原名为《旧事重提》,其后改为现名,并首次发表于《莽原》半月刊上。鲁迅,作为中国现代文学的奠基人,其作品在小说、散文、诗歌和杂文等诸多体裁领域均有...

    名著导读《朝花夕拾》ppt课件_1PPT课件.pptx

    1. **鲁迅与《朝花夕拾》** 鲁迅,原名周树人,是中国现代文学的开创者之一,他的作品往往以深刻的批判精神和独特的艺术风格著称。《朝花夕拾》创作于1926年至1927年,当时鲁迅已经是一位备受敬仰的作家。作品中,...

    1朝花夕拾-压缩——学习ppt课件

    1朝花夕拾-压缩——学习ppt课件

    朝花夕拾练习题100.pdf

    他的作品《朝花夕拾》,不仅是一部个人成长史的书写,更是一幅晚清至民国初期社会风貌的画卷,透过作者的个人经历折射出时代的变迁。 《朝花夕拾》由十篇散文组成,每一篇都是鲁迅对其生命中重要时刻的细腻描绘。他...

    朝花夕拾阅读汇报课.ppt

    朝花夕拾阅读汇报课.ppt

    《朝花夕拾》名著试题答案.pdf

    《朝花夕拾》是鲁迅先生的一部经典散文集,这些散文以作者的记忆为线索,生动地再现了作者童年的生活和成长经历。这本集子中收录的10篇文章,每篇都蕴含了鲁迅先生对传统文化、社会现象、人物命运等方面的深刻洞察与...

    鲁迅《朝花夕拾》中考名著习题及答案.doc

    《朝花夕拾》是鲁迅先生的一部散文集,收录了他回忆童年、少年和青年时期经历的文章。这部作品以其独特的艺术风格和深刻的思想内涵,成为了中国现代文学的经典之作。 在《朝花夕拾》中,我们可以看到鲁迅先生对童年...

    朝花夕拾考题+全部答案.docx

    《朝花夕拾》是鲁迅先生于1926年创作的一部回忆性散文集,共收录了十篇文章,包括《从百草园到三味书屋》、《阿长与&lt;山海经&gt;》等,这些文章反映了鲁迅先生的童年生活和成长历程,同时也揭示了封建社会的各种问题。...

    朝花夕拾鲁迅作品读书感受.pdf

    朝花夕拾鲁迅作品读书感受.pdf

    读后感500字-鲁迅《朝花夕拾》读后感范文500字8篇_朝花夕拾》读后感范文大全.docx

    根据提供的文档信息,这里主要涉及的是鲁迅先生的散文集《朝花夕拾》以及不同读者对其的读后感。尽管标签部分标注了“安全管理”,但从上下文来看,这部分内容显然与《朝花夕拾》及其读后感有关,与IT或安全管理领域...

    朝花夕拾考题全部答案.doc

    1. **《朝花夕拾》的内容**:这部作品包括《从百草园到三味书屋》和《阿长与&lt;山海经&gt;》等篇目,鲁迅通过这些文章回顾了自己的童年、少年时代,以及在日本留学的经历。 2. **封建孝道的批判**:在《二十四孝图》中,...

    《朝花夕拾》读书汇报会主持稿.doc

    《朝花夕拾》读书汇报会主持稿.doc

    2021年朝花夕拾读后感1500优秀.pdf

    2021年朝花夕拾读后感1500优秀.pdf

    《朝花夕拾》中考试题答案知识梳理.pdf

    《朝花夕拾》中考试题答案知识梳理.pdf

    朝花夕拾练习题答案.doc

    【朝花夕拾练习题答案】的文档涵盖了鲁迅先生及其代表作《朝花夕拾》的相关知识。以下是根据文档内容生成的知识点详细说明: 1. 鲁迅是中国现代伟大的文学家、思想家和革命家,原名周树人,字豫才,籍贯为浙江绍兴...

    《朝花夕拾》知识点测试题及答案精练.doc

    《朝花夕拾》知识点测试题及答案精练.doc

Global site tag (gtag.js) - Google Analytics