我对指针感到困惑。
说我是否有这个:
int size;
int bytes;
int numbers;
int *ptr;
ptr = new int[500];
我的问题是指向任何特定变量的第一个点或仅指向整个int变量的指针。如果我希望指针只指向数字变量,那该怎么办呢?
如果你不介意,我有一个尾巴问题。我正在尝试为我的数组分配动态内存,这有效吗? :int numbers[20];
int *ptr;
ptr = new int[size];
这会给我的数组提供堆内存吗?
我正在处理一个非常大的数组,没有其他方法可以使用它而不使用堆内存。
P.S:此时我无法使用矢量。
答案 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个号码,其中一个就够了。