| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 770 人关注过本帖
标题:指针与函数参数的几个问题不太理解(基础)
取消只看楼主 加入收藏
xg911335
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-5-28
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
指针与函数参数的几个问题不太理解(基础)
-----------------------------------问题一:---------------------------------------------
程序代码:
void test(int *s, int num)//一级指针实现  和  void test(int **s, int num)二级指针 都能实现功能,请问这两种写法有什么区别?
{
    *s = malloc(sizeof(int)* num);
}
void main(void)
{
    int *p = NULL;
    test(&p,5);
    *p = 123456;
    printf("%d\n",*p);
    if (p){free(p);p = NULL;}
    getchar();
    return;
}
//main里调用test(&p,5),由被调函数分配堆内存。问题来了,原test函数是用二级指针(void test(int **s, int num))来实现的。后来我修改城一级指针(void test(int *s, int num))也能实现(vs2013测试通过)。请问这两种写法有什么区别?

-----------------------------------问题二:---------------------------------------------
程序代码:
void myMalloc(char *s)//用问题一的测试方式,函数参数改为一级指针却不行。二级指针却可以void myMalloc(char **s),为什么? (&p)取指针p的地址作实参传递给形参,那么形参s的值就是p的地址。通过*s指向p的内容为什么却不能改变p的值呢?
{
    *s = (char *)malloc(100);
}
void main(void)
{
    char *p = NULL;
    myMalloc(&p);//去p的地址传入
    if (p){free(p);p = NULL;}//p的值还是NULL,这里报错
    getchar();
    return;
}


-----------------------------------问题三:---------------------------------------------
程序代码:
void myMalloc(char *s)
{
    //*s = (char *)malloc(100);   
    *s = 32;  //为什么这样却能修改指针p 的值?那为什么“问题二”malloc出来的地址却不能修改呢?
}
void main(void)
{
    char *p = NULL;
    myMalloc(&p);
        printf("%d %d\n", p); //能打印p的值  32
    //if (p){free(p);p = NULL;}
    getchar();
    return;
}


[ 本帖最后由 xg911335 于 2015-7-8 01:23 编辑 ]
2015-07-08 01:21
xg911335
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-5-28
收藏
得分:0 
感谢各位解答..

test(&p,5); 为什么取地址运算,p的类型会变成int ** ?

另外在请问一下,那里有比较好的C语言网络与线程的教程

[ 本帖最后由 xg911335 于 2015-7-9 15:35 编辑 ]
2015-07-09 15:34
快速回复:指针与函数参数的几个问题不太理解(基础)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034180 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved