将指针传递给函数并分配和初始化它

问题描述 投票:0回答:1

我想向函数发送一个空指针作为引用,然后在那里分配它并在那里初始化它

#include <iostream>

void foo(int*& p)
{
   p = new int(20);
   for (int i = 0; i < 20; ++i){
      *(p+i) = i;
      std::cout << *(p+i) << std::endl;
   }
}

int main()
{
   int* p = nullptr;

   foo(p);

   for (int i = 0; i < 20; ++i)
      std::cout << *(p+i) << std::endl;
}

但是这段代码的结果确实很奇怪,结果是

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
0
1
2
3
4
5
6
7
657975
668983
10
11
12
13
14
15
16
17
18
19

函数

foo
中的值是正确的,但在数组
main
v[7]
上的
v[8]
中具有奇怪的值。我无法理解它的行为。

c++ pointers reference
1个回答
0
投票

实际上,你不创建一个 20 个

int
的数组,你必须写
p = new int[20];
来代替。

#include <iostream>

void foo(int*& p)
{
   p = new int[20]; // we create an array of 20 ints
   for (int i = 0; i < 20; ++i){
      *(p+i) = i;
      std::cout << *(p+i) << std::endl;
   }
}

int main()
{
   int* p = nullptr;

   foo(p);

   for (int i = 0; i < 20; ++i)
      std::cout << *(p+i) << std::endl;
}

演示

© www.soinside.com 2019 - 2024. All rights reserved.