论坛首页 编程语言技术论坛

C语言中的多级指针

浏览 27191 次
精华帖 (2) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-30  
check 写道
mikeandmore 写道
night_stalker 写道
是 gcc 3 支持的怪异特性 …… 转成 char** 还行,不然就是一串 ?a ?a ……

我好像知道它把[][]看成什么了。。。嗯。。。
好像就是* xxx[],而不是二位数组。。。。那个[][]和[][N]完全是不同的东西。。。。
这个明显是编译期bug么。。。


研究所为的看成什么对C是没有意义的,C有很多的hacks可以做,比如char *a[0]之类的声明很多人经常用,无非是为了方便,增强后续代码的可读性,和文面的意义关联不大。总之C是一门简单清晰的语言,语法上只是忠实翻译一些东西,比如&无非就是取址,具体赋予其什么样的意义取决于传统,设计,以及环境。

至于所谓的***,我觉得单个情况也就罢了,一般来讲最好还是用typedef把具体的意义抽象出来,否则不好读。

嗯。。。
我只是从原理上说一下。。。这么搞应该属于编译器bug
0 请登录后投票
   发表时间:2009-07-02  
从个人角度开发,几级指针都没关系

如果从团队出发,最好不超过二级,否则影响维护,而且出错概率大大增加
0 请登录后投票
   发表时间:2009-07-03  
一大堆星号除了编译器还谁去数,把typedef用好才是正道。
0 请登录后投票
   发表时间:2009-07-03  
abruzzi 写道
mikeandmore 写道
那个啥。。。原型难道不是
int main(int argc, char* argv[]);
???

都说了,可以把指针理解成数组(当然不是完全等价),所以
char *argv[] == char **argv == char argv[][], 你可以分别试一下。


char argv[][]
你试过吗?数组那一维可以留空,留空是什么意思您讲解一下?

代码不是等价就算过,char* argv[]可读性更好,星号也应该打在类型这一边。
0 请登录后投票
   发表时间:2009-07-03  
过来乱入~
NeuronR 写道
星号也应该打在类型这一边。

知己啊,我也是喜欢把星号紧跟在类型的后面然后再空格。一般这么写让我看着清楚些,除了一口气声明多个变量的时候:
char c, *lpszName, d;

所以我声明变量都是一行行分开来声明……
0 请登录后投票
   发表时间:2009-07-10  
我也来参一脚

我认为二维数组 char *a[];的方式比较好
这个作为C里面的一种很基础的东西,是很实用的,处理多条字符串的时候就需要用到。
先声明一些指针,然后按照需求在对应的地址上malloc。
一定程度上满足了我一些洁癖的要求,呵呵。
0 请登录后投票
   发表时间:2009-09-15   最后修改:2009-09-15
oxromantic 写道
abruzzi 写道
oxromantic 写道
没有用到&,指针基础才涉及一半,
而且不考虑初级还是高级,希望LZ过一年再来看自己的代码,能写出这种内存使用代码的人也能如此狂妄,怪不得开源社区一直高质量代码百分比不高,原来多亏LZ你啊


大侠,你看完帖子了没有就在这儿喊?如果是看完了,那只能说你不识字了,我早就说明那个是《UNIX系统编程》中的一个例子,写的很好,所以贴出来大家学习下。不是我写的,再说了,说这个代码写的烂的人只不过是在暴露自己不学无术的真面目而已。

已经说了,文章的题目起的有点大了,例子给的比较简单,不好意思。

向你这样半吊子而且狂妄的人不多了
复制一段代码:
void freemakeargv(char **argv) {
   if (argv == NULL)
      return;
   if (*argv != NULL)
      free(*argv);
   free(argv);
}
请问这个代码在你的测试里有涉及吗?
非得我挑明了说,真是笑话

能写出这样的代码,可见你的功底之差。根本就是为了代码而代码,根本就没理解二重指针的使用范畴。
因此,看见你在里面判断argv==NULL就让我发笑,还不如林博士的在strcpy里面用assert。最起码,林博士的assert对于粗心的程序员还有用,你的argv==NULL只能对入错行的程序员有用。比你高级点。
0 请登录后投票
   发表时间:2009-09-15  
NeuronR 写道
一大堆星号除了编译器还谁去数,把typedef用好才是正道。

个人认为,第一,指针超过二重就不要用了;第二,不要用typedef,试图屏蔽数据类型的行为很恶心(迫不得已平台相关,条件编译的除外)
0 请登录后投票
   发表时间:2009-10-08  
楼主展示的代码还是有问题的
1:如果numtokens=0,根本没必要分配一次内存。应该将分配放在numtokens==0的检查之后。
2:函数内部分配了内存,如果调用者没有释放,则造成内存泄漏。
0 请登录后投票
   发表时间:2009-10-15  
一级最好, 二级有些特殊用途会用到, 三级及以上需要好好检查代码。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics