免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2713 | 回复: 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。。

谢谢!!!!

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

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

当然不行了,数组名是一个值(不是指针),怎么可以给一个值开辟空间呢?你在fun里面是要开辟空间的!你开辟了空间,那main里面的数组空间怎么办?

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

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

char **p;

char s[7][80];

p=str;

这样复制怎么不行啊!!!!!!!!!!!!!!!

对于
int fun(char **p)

main()
{
    char s[3][4];

     fun(s)
....
}
也不行啊

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

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

没有顺序,用malloc和calloc申请的内存就一定要释放那个指针。

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

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

还忘了释放内存了
不知道释放内存的顺序是怎样的。
从外向里释放

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

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

#include <stdio.h>;

void fun(char ***p)
{
        int i=0;

        *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);
        exit(0);
}

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

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

多谢zjqyb的启发
我的程序问题解决了。
#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));
}

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

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

char **p;

char s[7][80];

p=str;

这样复制怎么不行啊!!!!!!!!!!!!!!!

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

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

原帖由 "aero" 发表:
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