关于C语言的问题

[复制链接]
查看11 | 回复0 | 2009-1-30 06:28:38 | 显示全部楼层 |阅读模式
void,是无返回值的,但为什么我看好多题,还用了return,或指针让他有返回值了,那着样的话他和普通的有什么区别啊?其中0<=i<=9,则对a数组元素引用不正确的是?A a[p-a]B *(&a)C p D *(*(a+i))

                                                                                                 void,是无返回值的,但为什么我看好多题,还用了return,或指针让他有返回值了,那着样的话他和普通的有什么区别啊?解答:void表示“无类型”或“空类型”,表示该函数不要求带回返回值。而return;表示无表达式的语句,它的作用只是将控制权由被调用函数转回调用函数,而不返回任何值。其中0<=i<=9,则对a数组元素引用不正确的是?A a[p-a] B *(&a) C p D *(*(a+i)) 问题补充:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 解答:答案为D。其中答案A a[p-a]等价于a[0]。因为*p=a,所以指针p中存放的是数组a的首地址,而对于数组名来说,数组名代表数组的首地址,所以p和a的值相同,因此p-a=0。答案B指针运算符*和地址运算符&是一对相反的运算符,对一个变量先进行地址运算再进行指针运算后的结果实际上还是这个变量本身,因此*(&a) 与a等价。答案C 是数组元素引用的另一种形式,指针形式。p=*(p+i)=a.这是我的一些理解,希望对你有帮助。p是一个指针变量,它存放的是数组的首地址,指针p或数组名a均是指向数组a的首元素的指针因此数组a中下标为i的元素的表达式,可以有如下四种方式:(1)a(2)*(a+i) (3)*(p+i) (4)p不知还有什么疑问,我一定努力使你满意。                                       
提问者对答案的评价:

                                                                                                void作为返回值并非是没有返回值。C语言中的返回值是通过出栈来实现的,从汇编来看就是采用了pop。当pop的值类型忽略时,便可以使用void类型。这是在编译器级别忽略的。void类型也可以作为函数入口参数,其意义是不确定类型。另外void类型可以强制转换成任意你需要的类型,前提是你必须明确这样做是否正确。                                       

                                                                                                 对a数组元素引用不正确的是C,D理由:*p-->a,这是引用数组元素的两种形式.一种是用指针形式,一种是普通的数组形式. *(*(a+i))这个重复的表示数组值,如果是*(a+i),就正确.另外,p-a表示同一数组中,两个地址相差的数组元数的个数.&a=a+i,所以*(&a)=*(a+i)screen.width*0.35) this.width=screen.width*0.40\">

                                                                                                其实c语言中void不象c++那样严这也是它的漏洞吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行