LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 790|回复: 9

高手来看一下我理解的指针数组和指向指针的指针对不对!!

[复制链接]
发表于 2003-7-30 14:42:40 | 显示全部楼层 |阅读模式
**p是指向指针的指针,*y[3]是指针数组,字符串的存放位置是个内存地址(指针)。所以y[0]、y[1]、y[2]都是指针,*y[0]、*y[1]、*y[2]都是指向指针的指针,要把值赋给一个变量就必有定义一个指向指针的指针。
例:
char **p;
char *y[3]={"good","hello","you"};

p=y[0];
printf("%s",*p);

就会输出"good".

注:假设这是个完整的程序。
发表于 2003-7-30 15:09:03 | 显示全部楼层
不对吧。。。
p是char**, y[0]是char*
最后的*p其实已经是char了,你拿来当字符串打印

为什么不自己编译执行一下看看呢

不过。。。我不是高手啦
发表于 2003-7-30 17:08:35 | 显示全部楼层
char *y[3]是指针数组,y[0]是指针,*y[0]是指针的内容,不是指针的指针。
char *y[3]={"good","hello","you"};
*y[0]、*y[1]、*y[2]分别是:'g'、'h'、'y'

char **p;
赋值应该用:p = y;或p = &y[0];
或者用:
char *p;
p = y[0];
 楼主| 发表于 2003-7-30 21:10:42 | 显示全部楼层
呵呵,明白很多了,Thanks!
 楼主| 发表于 2003-7-31 12:06:11 | 显示全部楼层
又有个问题!!!!!

如果是 int (*p)[3] 这个数组又该怎么把它的值赋给一个变量呢?
这个变量又怎么声明呢?
发表于 2003-7-31 13:01:54 | 显示全部楼层
 楼主| 发表于 2003-7-31 13:46:14 | 显示全部楼层
老大,我英文没那么好啊,可不可以给个中文的链接。
发表于 2003-7-31 16:36:21 | 显示全部楼层
英文没有学好?!!
不要怕嘛,多看几遍也就熟悉了。不学好英文就想学好编程可是有不少困难唷。
发表于 2003-8-1 04:37:54 | 显示全部楼层
int (*p)[3] 是个指针,不是数组,p是指向int [3]的指针,如果有
int a[100][3];
可以写:p = a;
以后可以用p++遍历a,每次增加sizeof(int [3]),也就是12个字节,得到的p是&a[1][0]、&a[2][0]等等。
发表于 2003-8-3 10:44:43 | 显示全部楼层
回答得不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表