大可爱回帖中提到的吧友指出了谭某人教材关于数组一章最大的错误“数组名代表数组的首地址”(至少第3版还是这样说的,后面改没改不知道),指出了&arr和arr的不同(谭的说法,根本解释不了&arr+1和arr+1为什么不同),也知道“数组名等同于数组首元素的地址”这一说法不严谨(但他没有给出严谨的说法),在国内学C语言的人中,理解到这一步已经很不容易了。
数组名有两种用法:
1.在以下三种情况下,它不是指针,更不是地址,而是代表整个数组
(1)出现在sizeof后面的括号中,如:sizeof(arr) //直接参与sizeof运算,像sizeof(arr+1)则不是,因为它参与的是“+”运算
(2)出现在单目运算符&后面,如:&arr,用来求整个数组的指针,而不是求首元素的指针
(3)一维字符数组用字符串初始化:char arr[]={"abcdefg"}; //此字符串用来初始化整个数组而不是初始化arr[0] (这一条理解起来稍微有点难,这里先不说,留出思考空间)
2. 除此三种情况以外,数组名不再代表整个数组,而是退化成了一个“指向数组首元素的指针”,因此,并不仅限于作为右值时才是指针。
大可爱很好学啊,收集了不少东西,未来可期!