void GetMemory( char *p ) { p = (char *) malloc( 100 ); } void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( str ); }
1.动态内存获取应该验空;
2.形参只是实参的一份拷贝,要传值要用指针。如果形参本来就是指针,就要用二级指针;
3.动态内存抓过来要正确放掉,不然内存泄漏;
指针方面多敲代码自己就能理解了,我一开始觉得指针这么烦,一会儿定义指针,一会儿又解引用,而且还有空指针和野指针,乱七八糟的,那为啥要用指针?用值多方便的。
举个例子,这就像你给计算机讲故事(我有一个国外朋友是个美国人,他的名字很长每次说全名很麻烦,但他姓史密斯,为了方便,把他记为s)。这样就相当于你用s指向了你的朋友史密斯,他的类型是美国人。
Americans *s=“Brain-anckonosuytshivredge Smith ”
简单的来说就是在传参时,复制了一个和str指向内容相同的p指针,然后传给getmemory(),函数调用完后,p指针就自动消失,最后和str屁事没有,因为传参传的的又不是他自己,函数又没给他开辟空间
}