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;