C语言,这两个都是数组指针与数组c语言吗有没有区别


VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

若定义一个二维数组 array[2][3]则下列表達式所表达的含义是:
array–数组的指针与数组c语言,指向二维数组第一行数据所在的首地址;
array+1–数组的指针与数组c语言指向二维数组第二荇数据所在的首地址;
*array–数据指针与数组c语言,指向二维数组第一行第一列数据的地址;
*array+1–数据指针与数组c语言指向二维数组第一行第②列数据的地址;
(array+1)–数据指针与数组c语言,指向二维数组第二行第一列数据的地址;
array[1][1]–变量存放数组第二行第二列的数据;

若定义一个一维數组 array[5],则下列表达式所表达的含义是:
array–数据指针与数组c语言指向一维数组第一个数据所在的地址;
array+1–数据指针与数组c语言,指向一维數组第二个数据所在的地址;
*array–指针与数组c语言取值提取一维数组的第一个数据;
*array+1–指针与数组c语言取值求和,一维数组第一个数据的徝加上1;
*(array+1)–指针与数组c语言取值提取一维数组第二个数据;

指针与数组c语言数组:一个数组,里面存放的都是指针与数组c语言
将array赋给数组指针与数组c语言即将array的第一行赋给指针与数组c语言数组,(*p)[3]可代替array用于数组寻址

数组指针与数组c语言与指针与数組c语言数组1.指针与数组c语言数组与数组指针与数组c语言本节讲述两个很容易搞混淆的C语言复杂符号指针与数组c语言数组与数组指针与数组c語言并且希望通过这两个“入门级”的复杂符号引入C语言复杂表达式的解析方法。1.1字面意思理解指针与数组c语言数组与数组指针与数组c語言要想搞清这两个概念先抛开C语言来说,我们从字面上来理解这两个意思究竟什么是数组指针与数组c语言,什么是指针与数组c语言數组从语文的观点来理解的话一般放在前面的是修饰词,放在后面的是主语指针与数组c语言数组的实质是一个数组,但是为什么前面偠加个指针与数组c语言的修饰词呢因为这个数组里面的元素全部是指针与数组c语言变量从这可以看出其实指针与数组c语言数组就是一个普通数组,只是数组中的元素是指针与数组c语言变量因而叫指针与数组c语言数组。用同样的方式来理解一下数组指针与数组c语言数组指针与数组c语言的实质是一个指针与数组c语言,为什么前面要有数组的修饰词呢因为这个指针与数组c语言指向的是一个数组因而叫数组指针与数组c语言。现在看完了这个懂了这些,就算你目前还不知道C语言的一些规律也不知道在C语言中如何表示这个,如何表示那个吔不知道这个有什么用,那个有什么用但是至少你从语文上知道了这两个是什么东西。1.2分析指针与数组c语言数组与数组指针与数组c语言嘚表达式大部分的同学对这两个概念都有一些基本的了解只是有时候分不清楚是什么。写一个表达式int *p[5];这个是个什么东西大部分同学应该知道这个东西不是数组指针与数组c语言就是指针与数组c语言数组。只是不知道究竟是哪一个而已为什么不知道呢或许有人会说是因为記不住,如果光靠记忆来知道这个那肯定是行不通的,因为这个东西根本就不是用来记的如果靠记忆来区别它,那是很难的那么int *p[5];这個东西究竟是什么,其实跟它相关的还有这几个int *p[5]; int*p[5];我把有可能的几个都列出来了其实想要理解这些并不难,只要把握一般规律就可以了那么一般规律究竟是什么呢一般规律int *p; 这里的p是一个指针与数组c语言;那么再写一个int p[5]; 这里的p是一个数组。那么你是怎么知道这是一个指针与數组c语言那是一个数组呢有很多人会说当年我学的时候这样写就是指针与数组c语言,那样写就是数组这就是悲剧的来源,为什么你会蕜剧呢因为一开始你就是个悲剧一开始有人告诉你这是个指针与数组c语言,所以它是个指针与数组c语言有人告诉你它是个数组,所以咜是个数组其实这样的理解是错误的,并不是因为有人告诉你它是个指针与数组c语言所以它就是个指针与数组c语言,有人告诉你它是個数组所以它就是个数组。原因是因为C语言的编译器认为它是个指针与数组c语言所以它是个指针与数组c语言,C语言的编译器认为它是個数组所以它就是个数组。那C语言的编译器又怎么会知道它是指针与数组c语言还是数组呢指针与数组c语言的原因就在于*这个星号因为p湔面有个*符号,所以它就是个指针与数组c语言数组的原因就在于p后面有[],因此它才是个数组总结我们在定义一个符号时,关键在于首先要搞清楚你定义的符号是谁(第一步找核心);举个例子int *p[5];这个式子p是核心为什么它是核心呢这里的int,*[],;这几个符号都是为了定義p,因此它是核心这里核心的就是要找到核心是谁,如果这个都找不到那么你就可以洗洗睡了,后面的事跟你的关系已经不怎么大了其次再来看谁跟核心最近、谁跟核心结合(第二步找结合);以后继续向外扩展(第三步继续向外结合直到整个符号完)。这里说的一般规律就是第一步找核心第二步找结合。举个例子int *p;这里的核心是p但是p跟谁结合呢这里有两个选择,一个是*另一个是;,那么p会优先哏谁结合呢根据一般规律分号是不结合的因此p与*结合成*p,*p又是个什么东西呢左边是int右边是分号,因为分号不结合因此*p与int结合表示p这個指针与数组c语言指向int型的数据。再举个例子int p[5];核心是pp左边是int,右边是[]根据优先级,p与[]结合成数组那么这个数组的元素又是什么呢p[]左邊是int,右边是分号因为分号不结合,所以p[]与int结合表示数组中的元素是int型的注意如果核心和*结合,表示核心是指针与数组c语言;如果核惢和[]结合表示核心是数组;如果核心和结合,表示核心是函数用一般规律来分析3个符号第一个int *p[5];核心是p,但是p左边是*右边是[],那么p应該先跟谁结合呢这里就需要看谁的优先级更高优先级高的先与其结合。因为[]比*的优先级更高因此p是一个数组,数组有5个元素数组中嘚元素都是指针与数组c语言,指针与数组c语言指向的元素类型是int类型的;最终整个符号是一个指针与数组c语言数组第二个,int *p[5];核心是p因為的优先级是最高的,因此p是一个指针与数组c语言指针与数组c语言指向一个数组,数组有5个元素数组中存的元素是int类型;总结一下整個符号的意义就是数组指针与数组c语言。第三个int *p[5];解析方法和结论和第一个相同,在这里是可有可无的注意符号的优先级到底有什么用其实是决定当2个符号一起作用的时候决定哪个符号先运算,哪个符号后运算根据对同学的了解,有很多人对运算这个词并不了解很多囚只认为四则运算才叫运算,不错的会认为左移右移也叫运算位与位或也叫运算。但他就是没懂*[],()这些符号竟然也是运算。其實在C语言中只要跟运算符结合的都是运算遇到优先级问题怎么办第一,查优先级表;第二自己记住(全部记住都成神了,人只要记住[] . -這几个优先级比较高即可)根据上面的例子做一些总结总结1优先级和结合性是分析符号意义的关键1在分析C语言问题时不要胡乱去猜测规律,不要总觉得c语言无从捉摸从已知的规律出发按照既定的规则去做即可。总结2学会逐层剥离的分析方法1找到核心后从内到外逐层的进荇结合结合之后可以把已经结合的部分当成一个整体,再去和整体外面的继续进行结合总结3基础理论和原则是关键,没有无缘无故的規则

我要回帖

更多关于 指针与数组c语言 的文章

 

随机推荐