刷题碰到的二级指针运用
题目大致是:
void Func(char* p){
void Func(char* p){ p=(char*) malloc(100); } ///////////////////////////////////////////////////////////////////////////////////// int main() { char *str =NULL; Func(str); strcpy(str,"Hello"); return 0; }
问题大概是str有没有复制Hello字符串, 答案是没有, 因为 Func里面p指针没有传递给str,也就是说p是个形参在str作为实参的时候。相当于:
void Func(char p){ p ='a'; } ///////////////////////////////////////////////////////////////////////////////////// int main() { char str =NULL; Func(str); cout<<str; return 0; }
str没有被赋值.
所以上面的方程要改成:
void Func(char** p){ *p=(char*) malloc(100); } ///////////////////////////////////////////////////////////////////////////////////// int main() { char *str =NULL; Func(&str); strcpy(str,"Hello"); cout<<str; return 0; }
如果是二级指针的话就变成了指向指针的指针,就不会丢失形参的数据。
我个人不是很喜欢二级指针, 在想如果要一样的效果的话用指针引用是不是也行,代码是:
void Func(char *&p){ p=(char*) malloc(100); } ///////////////////////////////////////////////////////////////////////////////////// int main() { char *str =NULL; Func(str); strcpy(str,"Hello"); cout<<str; return 0; }