C语言的一道题目 为什么要换成指针,用变量a和b不行吗? 还有就
展开全部
1、题目中已经强调,不能修改main函数,注意第19行,&upper以及&lower是将upper与lower的变量地址传到fun函数中,其类型是指针,所以fun函数的后面两个参数是指针类型。故第3行后两个参数类型错误。
(假设此题目没有限定main函数不能更改,第19行你改为传入upper与lower,然后在20行打印的时候,upper与lower的值必然还是为0,因为按值传递时,fun函数里面的a、b只是upper与lower的一份拷贝,ab值的改变不影响upper、lower值,这块建议你看看【按值传递】这个知识点)
2、while (*s), s是一个char*类型指针,假设传入的字符串为“fang”,那么s的值等于'f'这个字符的地址。*s 为一个char字符,也就是'f', s++后,++产生的偏移为sizeof(char)长度,在s++后,s的值即为'a'这个字符的地址,此时*s等于'a',当*s为'g'时,继续s++,'g'后面的字符为'\0'(所有字符串的末尾都为0),那么*s就等于数字0(注意不是字符'0',数字0相当于NULL),这时候 while(*s) 相当于while(0) ,while条件为假(0为假,非0为真),while循环就会结束。规范的写法可以写为 while (*s != '\0')
(假设此题目没有限定main函数不能更改,第19行你改为传入upper与lower,然后在20行打印的时候,upper与lower的值必然还是为0,因为按值传递时,fun函数里面的a、b只是upper与lower的一份拷贝,ab值的改变不影响upper、lower值,这块建议你看看【按值传递】这个知识点)
2、while (*s), s是一个char*类型指针,假设传入的字符串为“fang”,那么s的值等于'f'这个字符的地址。*s 为一个char字符,也就是'f', s++后,++产生的偏移为sizeof(char)长度,在s++后,s的值即为'a'这个字符的地址,此时*s等于'a',当*s为'g'时,继续s++,'g'后面的字符为'\0'(所有字符串的末尾都为0),那么*s就等于数字0(注意不是字符'0',数字0相当于NULL),这时候 while(*s) 相当于while(0) ,while条件为假(0为假,非0为真),while循环就会结束。规范的写法可以写为 while (*s != '\0')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询