奇怪的指针:char buf[],char *buf[],char **buf[].

XHunterX 2005-06-10 11:48:18
哪位大侠能够讲讲他们的结构:
char buf[256];
char *buf[256];
char **buf[256];

小弟真的很迷惑,不就是个二级指针吗?怎么变出了二维数组出来?是不是可以无限char ***...***bu[256];
...全文
3559 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
csucdl 2005-06-11
  • 打赏
  • 举报
回复 1
char buf[256] 在内存中分配了连续的256个存储单元,每个存储单元的大小为SIZEOF(CHAR),存放的是
一个字符的ASCII码值

char *buf[256] 在内存中也分配了连续的256个存储单元,每个存储单元的大小为SIZEOF(CHAR*),存放的是字符指针,即一个字符数组的首地址, 于是buf[0]是某个字符数组的首址,buf[0][0]由基址变址寻址方式得到的便是一个字符了。
ruodeer 2005-06-11
  • 打赏
  • 举报
回复
那不是二维是三维
一个*就是一个array么
richardgates 2005-06-11
  • 打赏
  • 举报
回复
char buf[256];字符数组
char *buf[256];指针数组
char **buf[256];二级指针数组
简单问题,搞复杂,何必呢.
XHunterX 2005-06-11
  • 打赏
  • 举报
回复
TO : sztony(最爱美眉) :

至于 char ** ,我是这样理解的:

比如有十个char * 数组:char * buf1[256],char * buf2[256],char * buf3[256]...char * buf10[256];
我们把这十个数组的指针提取出来,存放在10个char ** 的数组里面,就得到:char ** p_buf[10]; 对于char *** 也是一样的,一层一层的往上抽象。
sztony 2005-06-11
  • 打赏
  • 举报
回复
我说一句,看对不对.
可以这样看:
char *buf[256] ={"000",
"1111",
"222" ,
"333",
...
...
...
"255"
};


所以 :
printf("%s\n",buff[255]);
===============================
结果为: "255"

所以*buf[256]其实就是256个字符指针,每个字符指针指向一个字符串



至于**buf[256]嘛,请高手说说.
zhousqy 2005-06-10
  • 打赏
  • 举报
回复
char *buf[256];
-------------
这个buf可以理解为指向二维数组的指针.
buf ---> --------- ---------
buf[0]-->|buf[0][0]|--->|buf[0][1]|
--------- ---------
buf[1]-->|buf[1][0]|--->|buf[1][1]|
--------- ---------
力哥 2005-06-10
  • 打赏
  • 举报
回复
char *buf[123]
char **buf[123]

char (*buf)[123]
char (**buf)[123]

有什么区别?

做了一个项目服务网:http://www.cpsol.net/ cpsol的意思是china project service online 即中国项目服务在线,欢迎大家提点意见,感激不尽!!!

:)

foochow 2005-06-10
  • 打赏
  • 举报
回复
mark!!
moon615 2005-06-10
  • 打赏
  • 举报
回复
这样看好一些
(char) buf[123];
(char *) buf[123];
(char **)buf[123];
c语言的多位数组设计得不太好
「已注销」 2005-06-10
  • 打赏
  • 举报
回复
建议重新温习指针和数组的关系。。。。呵呵。。我也在努力。。看《c和指针》
qfeng_zhao 2005-06-10
  • 打赏
  • 举报
回复
理论上应该可以无限 char **…………………………**buf[256]吧
qfeng_zhao 2005-06-10
  • 打赏
  • 举报
回复
char buf[256] 一维数组,每个元素为一个字符
char *pbuf[256] 一维数组,每个元素为一个指针,都可以指向上面定义的那个一维字符数组,所以说相当于二维数组,例如:pbuf[0][0] = buf[0];
char **ppbuf[256] 每个元素为一个指向指针的指针,即都可以指向上面定义的那个一维指针数组,应该相当于三维了吧,例如:ppbuf[0][0][0] = pbuf[0][0] = buf[0].
「已注销」 2005-06-10
  • 打赏
  • 举报
回复
char *buf[256];//类似于char buf[][256]
char **buf[256];//类似于char buf[][][256]
zwzzj 2005-06-10
  • 打赏
  • 举报
回复
char buf[123]; //buf是一个数组,里面的元素为 char 型的。
char *buf[123];// buf是一个数组,里面的元素为 char * 型的。
char **buf[123];// buf是一个数组,里面的元素为 char ** 型的。

「已注销」 2005-06-10
  • 打赏
  • 举报
回复
char buf[256];//普通的数组
char *buf[256];//指向字符类型的指针数组
char **buf[256];//是个指针数组。。指针指向字符类型的指针。。。也就是指针的指针。。
「已注销」 2005-06-10
  • 打赏
  • 举报
回复
如果你明白
int array[10]和int *ap=array;的关系就容易很多了
XHunterX 2005-06-10
  • 打赏
  • 举报
回复
如何区别他们呢:
char buf[256];
char *buf[256];
char **buf[256];
「已注销」 2005-06-10
  • 打赏
  • 举报
回复
是不是可以无限char ***...***bu[256];
----------
理论上是可以的。。
XHunterX 2005-06-10
  • 打赏
  • 举报
回复
100分啊,没人要么?
XHunterX 2005-06-10
  • 打赏
  • 举报
回复
呵呵,其实这里面还是有一些微妙的地方:
比如 数组的下标表示法与指针的转换,字符与字符串的转化,数组维数的变化,动态内存分配与静态分配...
加载更多回复(9)

70,019

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧