void ChangeStrPo(char **p)改为 char** ChangeStrPo(),然后main里,ps=ChangeStrPo();
目前成都创新互联已为千余家的企业提供了网站建设、域名、网页空间、成都网站托管、企业网站设计、垦利网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
说明,你原来的changestrpo,p是ps的副本,malloc后,p改变了值,但是ps并没有改变。当传递指针的时候,可以通过*ps来改变指针所值的地址内存放的值,但是是改变不了实参ps本身的值。
我感觉没有必要用二级指针,我们的目的主要是为了让主函数中的指针的地址指向一个空内存。我们完全可以通过传递这个指针的地址到子函数中,然后给这个指针的地址分配内存就可以了。例如下面这个程序就是正确的。根本没有必要使用到二级指针呀。
兄弟,那个不是一级指针,那是指针数组
指针数组作为函数形参时会自动转换为指针的指针,也就是你说的二级指针
char **p=book;从这一行也能证明我说的,自动转换
特别注意:它只会转换数组的最内层(我有点分不清内外)
int arr[2][6];
int (*aa)[6] = arr;//对
//int *aa1[6] = arr;//错
//int (*aa2)[2] = arr;//错
//int (*aa3)[] = arr;//错
//int *aa4 = arr;//错
//int **aa5 = arr; //错
那你应该用指针的指针才行,然后函数返回指针。
double *a(double **p)
{
*p=.... //修改指针所指向的地址
...
return *p; //返回指针p指向的地址
}
int main()
{
double *p=... //初始化指针p
double *q; //用于接收改变的指针
...
q=a(p); //将指针p的地址传递给a
...
return 0;
}
如果是用作dll的话,那么你应该使用和相应语言兼容的类型才行