指针

来源:互联网 发布:下载幻灯片软件 编辑:程序博客网 时间:2024/06/10 13:37
#include<stdio.h>
void Try_change(int *p)
{
        intb=7;
        p=&b;
}
int main()
{
        int*p=NULL;
        inta=5;
        p=&a;
        Try_change(p);
        printf("%d\n",*p);
        return0;
}





通过指针传递参数,其实质仍然是值传递,即是传递指针本身的地址。或者这样说更容易理解一些,即在Try_change中操作的形参,它不会改变实参的值,因此答案依然是5.


或者可以这样形象理解,形参是进入一个参数的时候临时克隆实参的一个家伙,这个家伙继承了实参的所有值,然而他和实参却是两个不同的家伙,Try_change函数内所有发生的行为只和形参有关,当函数结束的时候形参就会灰飞烟灭。而它所做的一切实参是没有丝毫影响的。


void GetMemory(char* p)
{
   char*p =new char[100];
}
void main()
{
   char*str;
   GetMemory(str);
   strcpy(str,"hi");// str = NULL
}        

在例如,使用形参分配内存的例子,也是显而易见的错误:






想要在自定义函数里改变主函数的指针,有两种方法:


1,函数指针的指针  

2,返回指针  在主函数对指针进行重新赋值