指向指針的指針作爲參數

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;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章