码迷,mamicode.com
首页 > 编程语言 > 详细

C语言指针作为形参的一些问题

时间:2015-03-11 13:00:14      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:指针   new   malloc   printf   

指针作为形参肯定有很多都不清楚其中具体的原理,我也是最近摸清了些门道:


下面就用一些例子来给大家说明:

void myMalloc(char *s) //我想在函数中分配内存,再返回 
{ 
    s=(char *) malloc(100); 
} 
void main() 
{ 
    char *p=NULL; 
    myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么? 
    if(p) 
        <span style="font-family: Arial, Helvetica, sans-serif;">free(p); </span>
} 

基于上面的问题: 因为指针作为形参传递过去的是它的拷贝,只是说他们指向同一块内存地址。

    上面其实是给他的拷贝体进行了内存地址分配


void myMalloc(char **s) 
{ 
    *s=(char *) malloc(100); 
} 
void main() 
{ 
    char *p=NULL; 
    myMalloc(&p); //这里的p可以得到正确的值了 
    if(p) free(p); 
} 

这里为什么能得到正确的值了呢? 

因为这里形参分配的内存其实是给s本身在分配了 ,上面分配的时候用的是(*s)

#include<stdio.h> 
void fun(int *p) 
{ 
    int b=100; 
    p=&b; 
} 
main() 
{ 
    int a=10; 
    int *q; 
    q=&a; 
    printf("%d/n",*q); 
    fun(q); 
    printf("%d/n",*q); 
    return 0; 
} 
这里打印的结果为: 10  10

为什么呢? 因为main函数中q指针作为形参传递给了fun函数,fun函数中p为q指针的拷贝体,f

fun函数中的p在函数体中重新指向了整数b的地址。所以q指针本身的值是没有发生变化的


#include<stdio.h> 
void fun(int *p) 
{ 
    *p=100; 
} 
main() 
{ 
    int a=10; 
    int *q; 
    q=&a; 
    printf("%d/n",*q); 
    fun(q); 
    printf("%d/n",*q); 
    return 0; 
} 

这里打印的结果是: 10  100

这里可以正确打印我们想要的结果了,因为main函数中的q指针和形参中的p指针都指向了整数a的地址。

fun函数中其实是修改整数a地址中的值,所以在后文中打印指针q中的内容时,也能打印出100了

C语言指针作为形参的一些问题

标签:指针   new   malloc   printf   

原文地址:http://blog.csdn.net/qingzai_/article/details/44196287

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!