指向指针的指针作为参数
程序员文章站
2024-01-01 17:37:52
...
1:指针传值
void setNum(int *set)
{
*set=5;
}
int main()
{
int value;
setNum=(&value);
cout<<value<<endl;
return 0;
}
完全可以修改value的值
这里p++修改的是value的值,
p++指针指向的位置发生了变化,这时候p解引用取出的值,就是不确定的了。
如果指向的是数值,那么比如*p指向数组第一个元素,p++之后,指向第二个数组元素。
但是如果是指针变量呢?
无法达到效果的方法
void GetMemory(char *p,int num)
{
p=(char *)malloc(sizeof (char)*num);
}
char *str=NULL;
//str是指针类型
GetMemory(str,10);//无法获得新分配的内存区域,只是为p申请了内存
//str=(char *)malloc(sizeof (char)*10); //放在主函数内,直接malloc也是可以的
strcpy(str,"hello");
cout<<"str="<<str<<endl;
使用返回值,返回malloc分配的地址告诉str
/*返回类型是char指针,是新分配的地址*/
char* GetMemory2(char *p,int num)
{
p=(char *)malloc(sizeof (char)*num);
return p;
}
char *str=NULL;
//str是指针类型
str=GetMemory2(str,10);
//str=(char *)malloc(sizeof (char)*10);
strcpy(str,"hello");
cout<<"str="<<str<<endl;
使用双重指针
/*双重指针作为参数,一重指针指向普通变量的地址,双重指针指向指针变量的地址*/
void GetMemory(char **p,int num)
{
*p=(char *)malloc(sizeof (char)*num);
}
char *str2=NULL;
GetMemory(&str2,12);
strcpy(str2,"hello str2");
cout<<"str="<<str2<<endl;
return 0;