标题:求教a和a[0]的具体区别
只看楼主
冬天之火
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-3-1
得分:0 
回复 10楼 冬天之火
但还是非常感谢各位大神的热心帮助。
2016-03-02 23:08
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
得分:5 
回复 10楼 冬天之火
说白了:如果传进scanf的参数是a,则是数组的首地址,如果是a【0】是这个数组的第一个元素的值,就是传值和传址的区别。
2016-03-02 23:17
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用冬天之火在2016-3-2 23:02:24的发言:

可能是我要求太高了,曾经有个老师说我太执著了,我试图着改变,但是,我真的想找到一个我认为满意的答案。


这玩意也没啥技术含量   不知道你纠结在哪里

DO IT YOURSELF !
2016-03-03 10:09
snailqiu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:45
注 册:2007-9-26
得分:1 
回复 10楼 冬天之火
你确实是太执着了。
你先了解清楚printf的格式要求吧。用了%s,就表示要输出一个字符串,而要输出字符串的话,就要用指向这个字符串的首地址的一个指针,那当然是a啦。
因为在C语言中,数组名就代表数组的首地址嘛。

而a[0],只不过是这个数组的第一个字符嘛。怎么可以代表整个字符串呢?

p--->a  
*p--->a[0]

你还没有搞清楚指针当中一个很重要的概念:指针所指向的类型

2016-03-03 11:17
snailqiu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:45
注 册:2007-9-26
得分:6 
回复 11楼 冬天之火
2016-03-03 11:34
冬天之火
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-3-1
得分:0 
看来我只能把我昨天晚上自己的推论说一下了,我不太喜欢比喻,虽然比喻很详细,但也会让事实失真。
     其实我认为做为一个程序员每当我们遇到一个“结构”,那么我们便需要有一定的好奇心去探索它具体是怎么写出来的。
     在我的推测中是这样的,就像浙大翁凯老师说过的一句话,[]是一个运算符,那么既然是一个运算符,那么它肯定有其自己的定义,或许让我写一个对数组的操作的时候,我也会定义一个类似[]的运算符。而因为a是个int型的数组,那么我们在用[]这个运算符的时候,我们就定义一个int型变量,至于为什么会知道定义一个int,我想a兄肯定早就被记在“小本子”上了。从[]中的数字计算得到地址然后,从地址开始到写满这个int型变量便停止。这样似乎能解释我这个问题,至于具体是不是这样,这还得请高手们出来评价。见笑了。。
     诶房子,房子,我的老师也是这么比喻的。。
2016-03-03 20:21
王大浩
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2016-3-3
得分:2 
首先,a是数组名——本身就是地址,a[0]是以a地址开头的第一个元素。
其次,printf("%s\n",*p);里的*是间接寻址运算符,会读到p指向地址内的数据,然后输出该地址内的数据;而去掉*后,p指向就是一个字符串的首地址了,然后再输出整个字符串!
2016-03-03 23:53
李掌柜
Rank: 6Rank: 6
等 级:侠之大者
帖 子:94
专家分:406
注 册:2015-6-18
得分:1 
六楼T大神说的很直白了,这就是房东(字符串指针)和租客(单个数组字符)的关系,在直白一点,房东可以打开整栋楼的门(表示格式是%s),租客通常只能打开自己租下的门(表示格式是%c),当然租客也能打开别的门(专用名词叫越界)那么问题来了,指针也是有自己的地址的,所以又出现了另一个名词“指针的指针“,吧叭吧叭一个问题又一个问题来了,少年,重在理解,每个人的理解不一样答案也就不一样了,错了不重要,重要的是错了还不愿改,,

照片是可以做成小游戏的,快来私聊我吧!
2016-03-04 03:17
无冥拉丁
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:8
专家分:5
注 册:2016-2-26
得分:0 
回复 10楼 冬天之火
a是a[0]的地址,而a[0]代表的是地址中存放的数据
2016-03-05 13:41
z13631440976
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
威 望:2
帖 子:40
专家分:118
注 册:2016-3-5
得分:0 
回复 楼主 冬天之火
简单来说就是
数组 字符串的输出需要的是地址
p和a 数组的首地址
 &是取址符号 &a【0】指的就是a【0】的地址也就是数组a的首地址与p、a相同,

而*为取值符号 *p、*a就是数组首地址内所储存的字符‘h',既然是字符就不能够用%s输出字符量。



总之理解 & * 对变量造成不同的变化
2016-03-05 15:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-462051-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.936058 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved