免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1114 | 回复: 6
打印 上一主题 下一主题

问个指针数组的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-18 23:26 |只看该作者 |倒序浏览

  1. #include <stdio.h>

  2. /* writelines: write output lines */
  3. void writelines(char *lineptr[], int nlines)
  4. {
  5.         while (nlines-- > 0)
  6.         printf("%s\n", *lineptr++);
  7. }

  8. int main()
  9. {
  10.         char *lineptr[] = {"abc", "def", "ghi"};
  11.         writelines(lineptr, 3);
  12. //        printf("%s\n",*lineptr++);

  13.         return 0;
  14. }
复制代码

是正确的

但是

  1. #include <stdio.h>

  2. /* writelines: write output lines */
  3. void writelines(char *lineptr[], int nlines)
  4. {
  5.         while (nlines-- > 0)
  6.         printf("%s\n", *lineptr++);
  7. }

  8. int main()
  9. {
  10.         char *lineptr[] = {"abc", "def", "ghi"};
  11. //     writelines(lineptr, 3);
  12.         printf("%s\n",*lineptr++);

  13.         return 0;
  14. }
复制代码

就错了 编译器显示:++' needs l-value

为什么?

我的编译器是ms vc6.0

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-07-18 23:32 |只看该作者
数组名是一个常量,不能修改。
第一个正确是因为lineptr是一个函数的参数,
弄明白c语言按值传递的规则。

论坛徽章:
0
3 [报告]
发表于 2006-07-18 23:34 |只看该作者
printf("%s\n",*lineptr++);

====>

printf("%s\n", (*lineptr)++);

论坛徽章:
0
4 [报告]
发表于 2006-07-18 23:40 |只看该作者
明白一点了 但函数里的参数被传值以后不也成了数组了?

论坛徽章:
0
5 [报告]
发表于 2006-07-18 23:47 |只看该作者
应该是
函数里的参数是指针变量,而不是数组,因为数组不能赋值。

对吧?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-07-18 23:48 |只看该作者
原帖由 erduo100 于 2006-7-18 23:47 发表
应该是
函数里的参数是指针变量,而不是数组,因为数组不能赋值。

对吧?

对。

论坛徽章:
0
7 [报告]
发表于 2006-07-19 09:29 |只看该作者
这关于指针和数组 c expert programming 里有非常华丽的论述...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP