void func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
这是我é‡åˆ°çš„é¢è¯•é—®é¢˜ä¹‹ä¸€ã€‚在main()ä¸ï¼Œå®ƒå£°æ˜Žä¸€ä¸ªint指针,在å¦ä¸€ä¸ªå‡½æ•°ä¸åˆ†é…内å˜å¹¶å°è¯•åœ¨main()本身ä¸ä½¿ç”¨ã€‚我认为这在æŸç§ç¨‹åº¦ä¸Šæ˜¯é”™è¯¯çš„,但是这有什么用呢,任何想法?
ç”案 0 :(得分:2)
ptr
æŒ‰å€¼ä¼ é€’ç»™funcn
ï¼Œå› æ¤å‚æ•°ptr
仅获å–ptr
ä¸main
的副本。对func
ptr
的任何更改都ä¸ä¼šä¿®æ”¹main
çš„{​​{1}}ï¼Œå› æ¤ptr
ä¸çš„指针ptr
未分é…内å˜ã€‚分é…给未åˆå§‹åŒ–的指针
main
调用未定义的行为。
å¯èƒ½çš„解决方案:
使用指å‘指针的指针:
*ptr = 2;
从函数返回指针:
void func(int** ptr)
{
*ptr = new int;
}
int main()
{
int* ptr;
func(&ptr);
*ptr = 2;
}
使用å‚考:
int* func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
ptr = func(ptr);
*ptr = 2;
}
ç”案 1 :(得分:1)
void func(int&* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
æŒ‰å¼•ç”¨ä¼ é€’æŒ‡é’ˆï¼Œè€Œä¸æ˜¯æŒ‰å€¼ä¼ 递