C++ 未更新的数组C++;

C++ 未更新的数组C++;,c++,arrays,pointers,C++,Arrays,Pointers,我正在处理这个函数,它接受一个整数作为输入,并由函数pointerArr()中的指针修改pointerArr()应该为变量pointer分配一个随机值,然后构建一个大小为pointer的数组。不过,数组永远不会填充到循环中。它应该用循环中生成的随机数填充。r的值不断更新,但数组从未填充。有什么想法吗 #include <stdlib.h> using namespace std; int pointerArr(int *pointer); int main() { int

我正在处理这个函数,它接受一个整数作为输入,并由函数
pointerArr()
中的指针修改
pointerArr()
应该为变量
pointer
分配一个随机值,然后构建一个大小为
pointer
的数组。不过,数组永远不会填充到循环中。它应该用循环中生成的随机数填充。
r
的值不断更新,但数组从未填充。有什么想法吗

#include <stdlib.h>

using namespace std;

int pointerArr(int *pointer);

int main() {
  int pointed = -1;
  pointerArr(&pointed);
  return 0;
}
int pointerArr(int *pointer) {

    int randNum;
    *pointer = 8 + (rand() % (int) (33 - 8 + 1));
    int arr [*pointer];
    for (int i = 0; i < *pointer; i++) {
        int r = rand() % 50;
        arr[i] = r;
    }//
    return 0;

}
#包括
使用名称空间std;
int pointerArr(int*指针);
int main(){
整数=-1;
pointerArr(&pointed);
返回0;
}
int pointerArr(int*指针){
int-randNum;
*指针=8+(rand()%(int)(33-8+1));
int-arr[*指针];
用于(int i=0;i<*指针;i++){
int r=rand()%50;
arr[i]=r;
}//
返回0;
}

int-arr[*指针]在标准C++中是非法的。如果您使用的是扩展/非标准方言,则应将您的问题标记为扩展/非标准方言。形式上,你的代码不是C++。<代码> int ARR [*指针];
是所谓的可变长度数组,因为它的大小在编译时是未知的。它不是标准C++,它是由G++等编译器支持的扩展。你为什么不使用std::vector来代替呢?@火星人:嗯,也许是你的步进工具显示了误导性的信息?如果您的代码进行编译(数组声明无效),那么“从不填充”数组就是人们所说的“神奇”行为,这很难相信。@您的代码在ideone上运行良好的火星人:。我刚刚添加了
cout
的头,在你的循环之后又添加了一个循环,用于打印数组的内容(我本可以将它添加到你的循环中,但我想保持它不变)。这可能是在编译时启用了优化,它认识到你从未使用过
arr
,只是完全摆脱了它。如果您添加
cout
语句来打印数组,那么您现在正在使用它,因此编译器不再删除它。