锁定老帖子 主题:C语言中的多级指针
精华帖 (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 |
|
返回顶楼 | |
发表时间:2009-07-02
从个人角度开发,几级指针都没关系
如果从团队出发,最好不超过二级,否则影响维护,而且出错概率大大增加 |
|
返回顶楼 | |
发表时间:2009-07-03
一大堆星号除了编译器还谁去数,把typedef用好才是正道。
|
|
返回顶楼 | |
发表时间:2009-07-03
abruzzi 写道 mikeandmore 写道 那个啥。。。原型难道不是
int main(int argc, char* argv[]); ??? 都说了,可以把指针理解成数组(当然不是完全等价),所以 char *argv[] == char **argv == char argv[][], 你可以分别试一下。 char argv[][] 你试过吗?数组那一维可以留空,留空是什么意思您讲解一下? 代码不是等价就算过,char* argv[]可读性更好,星号也应该打在类型这一边。 |
|
返回顶楼 | |
发表时间:2009-07-03
过来乱入~
NeuronR 写道 星号也应该打在类型这一边。
知己啊,我也是喜欢把星号紧跟在类型的后面然后再空格。一般这么写让我看着清楚些,除了一口气声明多个变量的时候: char c, *lpszName, d; 所以我声明变量都是一行行分开来声明…… |
|
返回顶楼 | |
发表时间:2009-07-10
我也来参一脚
我认为二维数组 char *a[];的方式比较好 这个作为C里面的一种很基础的东西,是很实用的,处理多条字符串的时候就需要用到。 先声明一些指针,然后按照需求在对应的地址上malloc。 一定程度上满足了我一些洁癖的要求,呵呵。 |
|
返回顶楼 | |
发表时间: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只能对入错行的程序员有用。比你高级点。 |
|
返回顶楼 | |
发表时间:2009-09-15
NeuronR 写道 一大堆星号除了编译器还谁去数,把typedef用好才是正道。
个人认为,第一,指针超过二重就不要用了;第二,不要用typedef,试图屏蔽数据类型的行为很恶心(迫不得已平台相关,条件编译的除外) |
|
返回顶楼 | |
发表时间:2009-10-08
楼主展示的代码还是有问题的
1:如果numtokens=0,根本没必要分配一次内存。应该将分配放在numtokens==0的检查之后。 2:函数内部分配了内存,如果调用者没有释放,则造成内存泄漏。 |
|
返回顶楼 | |
发表时间:2009-10-15
一级最好, 二级有些特殊用途会用到, 三级及以上需要好好检查代码。
|
|
返回顶楼 | |