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

问题描述 投票: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个回答
1
投票

实际上,您创建的不是 20 个

int
的数组,而是只有一个
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.