大半年没写了,说实在的我个人认为C++博客是最好的技术博客之一,我一直非常喜欢它,所以只要有时间,一定要写一些在上面。
   感悟最深的就是,好容易花数个小时搞出来的东西,过段时间竟然忘记了,或者是记忆也变得模糊了,很是心痛啊!记录下来,就不会有这种倒霉事了 :<
   言归正传,已经好像是在读《C专家编程》时,见到过说数组名是个很“奇特”的指针,某种意义上说,它不能称为指针,因为它只能作为右值出现,当时也比较迷惑,很偶然,今天在读《Unix环境高级编程》时,写一个打印出进程的环境变量表的小玩意,要用到environ这个全局指针,它就是个指针数组的名字,该数组每个元素为一个字符串,以'\0'结尾,数组最后一个元素为NULL,开始先把该数组的首地址拷贝给了另一个指针,char **pp = environ; 然后为了偏移到下一个字符串,我竟然低级的写了++environ,编译报错说: ISO C++ forbid to use a non-refernece type as a lvalue! 顿时想到environ是一个数组名,不能作为一个左值使用。于是又想到了如果int *ia1[]; int *ia2[],当写ia1 = ia2时会出现同样的错,这就是因为ia1 ia2都为右值,任何一个不能出现在=号的左边充当左值!

代码1:
char *sz[] = { "aaa", "bbb", "ccc", 0 };
 int i = 0;
 while (sz[i] != 0)
 {
  char *p = sz[i];
  printf("%s\n", p);
  ++i;
 }

代码2: Unix系统上打印一个进程的环境变量表
char **pp = environ;

 while (*pp != 0) {
  printf("%s\n", *pp);
  ++pp;
 }

少的可怜,1个小时浪费了....

posted on 2009-04-04 16:45 Reno 阅读(233) 评论(0)  编辑 收藏 引用 所属分类: C/C++语言

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


统计