免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2707 | 回复: 17
打印 上一主题 下一主题

快看啊,多层指针传递问题!!!!!!!!!!!!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-07 17:54 |只看该作者 |倒序浏览
#include <stdio.h>;

void fun(char  **p)
{
        int i,j;
       
        p=(char **)malloc(sizeof(char *)*4);       
               
               
                for(i=0;i<4;i++)
                p=(char *)malloc(sizeof(char)*40);
               
               

        strcpy(p[0],"test1";
        strcpy(p[1],"test2";
        strcpy(p[2],"test3";
        strcpy(p[3],"test4";
        for(i=0;i<4;i++)
                printf("p[%d] is [%s]\n",i,p);
               
       
       
}

void main()
{
        char **pp;
        int i;
       
        fun(pp);
        for(i=0;i<4;i++)
                printf("pp[%d] is [%s]\n",i,pp);
               
       
       
}

为什么pp打印的值是null。。

谢谢!!!!

论坛徽章:
0
2 [报告]
发表于 2004-09-07 18:19 |只看该作者

快看啊,多层指针传递问题!!!!!!!!!!!!!!

2级指针也是变量,fun()只是修改了pp的副本,没有改变pp本身。

论坛徽章:
0
3 [报告]
发表于 2004-09-07 18:31 |只看该作者

快看啊,多层指针传递问题!!!!!!!!!!!!!!

需要传入pp的地址。

论坛徽章:
0
4 [报告]
发表于 2004-09-07 18:36 |只看该作者

快看啊,多层指针传递问题!!!!!!!!!!!!!!

能说明白一些吗?
帮忙修改一下

论坛徽章:
0
5 [报告]
发表于 2004-09-07 19:58 |只看该作者

快看啊,多层指针传递问题!!!!!!!!!!!!!!

最简单的办法,
#include <stdio.h>;

char** fun()
{
int i,j;
char **p;
p=(char **)malloc(sizeof(char *)*4);


for(i=0;i<4;i++)
p=(char *)malloc(sizeof(char)*40);



strcpy(p[0],"test1";
strcpy(p[1],"test2";
strcpy(p[2],"test3";
strcpy(p[3],"test4";
for(i=0;i<4;i++)
printf("p[%d] is [%s]\n",i,p);


return p;
}

void main()
{
char **pp;
int i;

pp = fun();
for(i=0;i<4;i++)
printf("pp[%d] is [%s]\n",i,pp);



}

论坛徽章:
0
6 [报告]
发表于 2004-09-07 20:09 |只看该作者

快看啊,多层指针传递问题!!!!!!!!!!!!!!

用指针的引用不就得了?

论坛徽章:
0
7 [报告]
发表于 2004-09-07 20:17 |只看该作者

快看啊,多层指针传递问题!!!!!!!!!!!!!!

返回值的方法我知道了
但是通过参数的方法就是不行

另外
char **p;

char s[7][80];

p=str;

这样复制怎么不行啊

论坛徽章:
0
8 [报告]
发表于 2004-09-08 08:50 |只看该作者

快看啊,多层指针传递问题!!!!!!!!!!!!!!

#include <stdio.h>;

void fun(char ***pp)  //??
{
char **p=*pp;    //??
int i,j;

p=(char **)malloc(sizeof(char *)*4);


for(i=0;i<4;i++)
p=(char *)malloc(sizeof(char)*40);



strcpy(p[0],"test1";
strcpy(p[1],"test2";
strcpy(p[2],"test3";
strcpy(p[3],"test4";
for(i=0;i<4;i++)
printf("p[%d] is [%s]\n",i,p);



}

void main()
{
char **pp;
int i;

fun(&pp); //???
for(i=0;i<4;i++)
printf("pp[%d] is [%s]\n",i,pp);



}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2004-09-08 08:52 |只看该作者

快看啊,多层指针传递问题!!!!!!!!!!!!!!

C语言的函数是值传递,不管这个变量是什么,都不能改变,但是,这个变量如果是个地址,那么从这个地址找到的数据就可以改变,但是由于这个地址是这个变量的值,所以这个地址也就不能改变。

呵呵,其实,根本不用记入门书中的什么参数不能改变,传指针可以改变等等。只要记住:值传递,参数不能改变就好了。指针也是一种参数,所以不能改变,但指针指的数据就不是参数了,所以就可以改变。

原则是简单的,C追求的也是简单。

论坛徽章:
0
10 [报告]
发表于 2004-09-08 09:48 |只看该作者

快看啊,多层指针传递问题!!!!!!!!!!!!!!

#include <stdio.h>;
void fun(char ***p)
{
int i,j;
char **p1=(char **)malloc(4);

for(i=0;i<4;i++)
p1=(char *)malloc(sizeof(char)*40);
strcpy(p1[0],"test1";
strcpy(p1[1],"test2";
strcpy(p1[2],"test3";
strcpy(p1[3],"test4";
for(i=0;i<4;i++)
printf("p[%d] is [%s]\n",i,p1);
*p=p1;
}

void main()
{
char **pp;
int i;

fun(&pp);

for(i=0;i<4;i++)
printf("pp[%d] is [%s]\n",i,(char **)pp);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP