免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345678
最近访问板块 发新帖
楼主: _HellAngel_
打印 上一主题 下一主题

[C] 请教一个关于main()函数的问题。。(新手请教) [复制链接]

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
71 [报告]
发表于 2013-01-17 03:03 |只看该作者
本帖最后由 _HellAngel_ 于 2013-01-17 23:35 编辑

回复 70# Ager

SOGA.....那应该是用后缀自增运算符才好= =。。。我的确把main()函数的一些东西不知所以然的混进来了。。我晕= =。。。程序。。应该是。。。
  1. #include<stdio.h>

  2. int foo(int barz, char *quox[])
  3. {
  4.     while(--barz > 0)
  5.        printf("%s", *(quox++));
  6.      return 0;
  7. }
  8.    
复制代码
最开始打印的应该是quox[0]。



如果按照我之前的。。用前缀自增运算符。。。= =。。最先打印的。。是。。quox[1].....

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
72 [报告]
发表于 2013-01-18 05:40 |只看该作者
_HellAngel_ 发表于 2013-01-17 03:03
回复 70# Ager

SOGA.....那应该是用后缀自增运算符才好= =。。。我的确把main()函数的一些东西不知所以 ...


由于你没有为这个函数明确地写出“白皮书”,所以,我们拿到这个作为接口的函数,并不清楚它的具体作用包括形式参数的意义是怎么样的。

那么,请你用一个调用它的实例,来展现上述事情。

呵呵 {:3_193:}

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
73 [报告]
发表于 2013-01-20 20:35 |只看该作者
回复 72# Ager


恩。。我准备继续回来搞这个帖子= =。。。实例写好了。。Ager哥你也看过了。。。额。。就看看。。切不切题。。= =
  1. #include<stdio.h>
  2. #include<string.h>

  3. int foo(int barz, char *quox[]);

  4. char *p, c;
  5. int n = 0;

  6. int main(void)
  7. {
  8.     while((c = getchar()) != EOF) {
  9.         *p++=c;
  10.         n = strlen(*p);
  11.         foo(n, *p);
  12.     }
  13.     return 0;
  14. }


  15. int foo(int barz, char *quox[])
  16. {
  17.     while(--barz > 0)
  18.        printf("%s", *(quox++));
  19.      return 0;
  20. }
复制代码

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
74 [报告]
发表于 2013-01-20 21:40 |只看该作者
本帖最后由 Ager 于 2013-01-20 21:42 编辑
_HellAngel_ 发表于 2013-01-20 20:35
回复 72# Ager

恩。。我准备继续回来搞这个帖子= =。。。实例写好了。。Ager哥你也看过了。。。额。。就看看。。切不切题。。= =

  1.         while((c = getchar()) != EOF) {
  2.             *p++=c;
  3.             n = strlen(*p);
  4.             foo(n, *p);
  5.         }
复制代码


在你还没有进深到关于I/O操作以及while循环的学习阶段的时候,暂时还是最好不要照葫芦画瓢地使用这种程序设计模式(我估计你是从你目前正在看的教材上照搬过来滴),除非你非常清楚自己所写的代码的具体含义是什么。

先撇开I/O操作和循环语句不说,单看
  1. n = strlen(*p);
  2. foo(n, *p);
复制代码
这里你用到了库函数strlen,关于这个函数的原型是:
  1. #include <string.h>
  2. size_t strlen(const char *s);
复制代码
这里规定了,strlen仅有的一个参数是一个被const限定的 char * 类型的数据,即一个指向char类型数据的指针。而你调用该函数,使用的参数( *p ),却是一个char类型的数据。类型错误。

接着,你用到了自己所编写的函数foo,这个函数要求第二个参数(此形式参数的声明为 char *quox[])是一个 char ** 类型的数据,但你传入的,同上( *p ),却是一个char类型的数据。类型错误。

目前你需要解决的,就是搞清“二级指针”等相关问题。所以,正确地理解类型范畴该如何在程序中正确使用,是首要的、切题的。

现在,你可以把藉由I/O操作从标准输入(如键盘)获取字符的事情先撇开,专攻“二级指针”这块,显然,正确理解“二级指针”的前提是:正确理解“指针”,以及“数组”等范畴,还有正确地在程序中运用关于“类型”的机制。

呵呵  {:3_193:}

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
75 [报告]
发表于 2013-01-20 21:50 |只看该作者
本帖最后由 Ager 于 2013-01-20 21:54 编辑

兄弟,你面对这麽一大堆“困难”,不要着急,也没必要着急。正确地学习和把握C语言,并非易事。

跟在诸如CSDN这样的论坛上不同,在CU的C版上学习C语言,学习曲线通常是比较陡峭(有时候甚至也是不太“系统化”的),尤其对于初学者来说。

那种让初学者感到轻松愉快、不必太动脑筋的学习历程,通常都是以“通俗易懂”作为糖果却是丧失了正确性的麻痹效应使然,诸如谭老教授的C语言 —— 这就是我坚定地支持@pmerofc进行“解毒”的重要原因。

呵呵 {:3_193:}

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
76 [报告]
发表于 2013-01-20 21:53 |只看该作者
本帖最后由 _HellAngel_ 于 2013-01-20 22:46 编辑

回复 74# Ager

恩。。我的确是根据印象自己写的= =。。不过我的确不知道我写的是什么= =。。strlen我也不是很理解= =。。我晓得= =。。。恩。。我也有斟酌过*p和p。。只是用起来的时候的确还是一头雾水= =。。。悲剧。。。果然不写不知道。。一写吓一跳= =。。。。。写简单点的。。。。我还得再想想= = 。。。所以我还得再回去看看。。那几个关于指针的帖子。。以及。数组。。数组。。数组这玩意。。我好像没写帖子问过。。= =。。有必要再来问一些= =。。。还有Ager哥你说的C中最难的。。数据类型= =。。我。。。。。。
   

论坛徽章:
1
白羊座
日期:2014-03-22 18:23:03
77 [报告]
发表于 2013-01-20 21:56 |只看该作者
回复 75# Ager

恩。。的确深受打击。。噗。。所以我后来把名字改了的= =。。。不过我喜欢这个样子。。不然我又无聊了。。噗= =。。如此BT的想法。。。= =。。呵呵。。。我再继续理解理解。。= =。。
   

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-03-13 15:26:06CU大牛徽章
日期:2013-03-13 15:26:47
78 [报告]
发表于 2013-01-23 14:46 |只看该作者
上来看了一下你们说的 虽然不知道你们在说什么 但是好像很高深的样子
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP