LinuxSir.cn,穿越时空的Linuxsir!

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

还是指针的指针的问题!

[复制链接]
发表于 2003-7-9 09:48:25 | 显示全部楼层 |阅读模式
char *arg[30];
arg是指针的指针,但是指针数组在内存中是怎么存储的?

char **p;
*p=*arg;
这个编译可以通过,把a的地址付给p,那p是不是也变成了数组的指针?
发表于 2003-7-9 09:53:03 | 显示全部楼层
P——>*p——>**p

P和*P存放地址,**P存放存储单元

*p=*arg;即是把*ARG[0]的地址ARG[0]附给*P
 楼主| 发表于 2003-7-9 09:58:26 | 显示全部楼层
如果给arg[0]付一个字符串,那这个字符串是否存在自由存储区里?
发表于 2003-7-9 10:05:19 | 显示全部楼层
最初由 shangxd 发表
如果给arg[0]付一个字符串,那这个字符串是否存在自由存储区里?


arg[0]不能附值

*arg[0]才能

*arg[0]=**P;
 楼主| 发表于 2003-7-9 10:14:24 | 显示全部楼层
当我使用*arg[0]="hello";的时候提示有错误,然后我先声明一个char *w="hello",然后arg[0]=w;这样编译才通过。上面说的用*arg[0]才能付值好像不对啊!
 楼主| 发表于 2003-7-9 10:19:52 | 显示全部楼层
int main(void)
{
    char *a[20];
    char *w="hello";
    char **p;
    a[0]=w;
    a[1]=w;
    *p=*a;

    printf("%s",a[0]);
    getchar();   
    return 0;
}
这样执行出来的结果是正确的,但是如果把printf语句里的a[0]换成p[0]也是正确的,但是如果换成是p[1]就出现乱码。
发表于 2003-7-9 10:33:16 | 显示全部楼层
最初由 shangxd 发表
当我使用*arg[0]="hello";的时候提示有错误,然后我先声明一个char *w="hello",然后arg[0]=w;这样编译才通过。上面说的用*arg[0]才能付值好像不对啊!


我说的是附值(存储单元的内容),
W是地址来的,可以用ARG[0]指向W
发表于 2003-7-9 10:51:53 | 显示全部楼层
最初由 shangxd 发表
int main(void)
{
    char *a[20];
    char *w="hello";
    char **p;
    a[0]=w;
    a[1]=w;
    *p=*a;

    printf("%s",a[0]);
    getchar();   
    return 0;
}
这样执行出来的结果是正确的,但是如果把printf语句里的a[0]换成p[0]也是正确的,但是如果换成是p[1]就出现乱码。



你把P定义为指针数组就不会出错
发表于 2003-7-9 18:43:26 | 显示全部楼层
最初由 shangxd 发表
int main(void)
{
    char *a[20];
    char *w="hello";
    char **p;
    a[0]=w;
    a[1]=w;
    *p=*a;

    printf("%s",a[0]);
    getchar();   
    return 0;
}
这样执行出来的结果是正确的,但是如果把printf语句里的a[0]换成p[0]也是正确的,但是如果换成是p[1]就出现乱码。

p=a
发表于 2003-7-9 20:51:59 | 显示全部楼层
最初由 hqxyn 发表
p=a



哈哈,不错不错

为什么我没想到
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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