指针指向哪种数据类型?

时间:2017-03-18 19:02:13

标签: c++ arrays pointers heap

我对指针感到困惑。

说我是否有这个:

int size;
int bytes;
int numbers;
int *ptr;

ptr = new int[500];

我的问题是指向任何特定变量的第一个点或仅指向整个int变量的指针。如果我希望指针只指向数字变量,那该怎么办呢?

如果你不介意,我有一个尾巴问题。我正在尝试为我的数组分配动态内存,这有效吗? :

int numbers[20];
int *ptr;
ptr = new int[size];

这会给我的数组提供堆内存吗?

我正在处理一个非常大的数组,没有其他方法可以使用它而不使用堆内存。

P.S:此时我无法使用矢量。

3 个答案:

答案 0 :(得分:1)

int *ptr是指向int变量的指针。无论什么变量都没关系,只要它是int就可以得到以下内容。

int size;
int bytes;
int numbers;
int *ptr;

ptr = &size;
ptr = &bytes;
ptr = &numbers;

我使用&符号,因为这给出了变量的实际地址而不是它的值。指针只能存储变量的地址。

如果你想使用指针指向的实际值,你需要尊重它,就像这样

int number = 5;
int *ptr;
ptr = &number;
cout << *ptr;   
//5

至于你的第二个问题。是的,这将为您提供指向堆上数组的有效指针。

有关更多信息,我建议查找一个数组实际上是什么,因为您可能会感到困惑,为什么在分配指向数组的指针时不需要使用&符号。

答案 1 :(得分:0)

<?php foreach($file->children() as $item) { echo $item . "<br>"; } ?> 未初始化,因此它实际上指向“垃圾值”或在这种情况下是随机存储器地址。查看here

如果您希望int *ptr指向数字的值,则应首先初始化int *ptr,因为如果您尝试取消引用它,可能会导致Uninitialized pointers in code

您可以使用Address-of运算符int numbers将ptr指定为numbers。然后使用取消引用运算符&来获取*的值。

ptr

这将打印numbers = 4; ptr = &numbers; cout << *ptr << endl;

答案 2 :(得分:0)

int arNumbers[20];

从堆栈中获取内存并且不是动态的,编译器会负责释放内存。

int *pNumbers = new int[20];

从堆中提供内存并且是动态的,您需要在完成后删除它:

delete[] pNumbers;

如果您需要20个号码,其中一个就够了。