Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在数组中使用指针_C++_Arrays_Pointers_Multidimensional Array - Fatal编程技术网

C++ 在数组中使用指针

C++ 在数组中使用指针,c++,arrays,pointers,multidimensional-array,C++,Arrays,Pointers,Multidimensional Array,我正在尝试使此代码正常工作: #include <iostream> void reset_2D_dbl_array(double **p, int nrows, int ncols); int main(){ double big_matrix[10][10]; reset_2D_dbl_array(big_matrix,10,10); std::cout << big_matrix[0][0]; std::cin.ignore()

我正在尝试使此代码正常工作:

 #include <iostream>

void reset_2D_dbl_array(double **p, int nrows, int ncols);

int main(){
    double big_matrix[10][10];
    reset_2D_dbl_array(big_matrix,10,10);
    std::cout << big_matrix[0][0];
    std::cin.ignore();
    return 0;
}
void reset_2D_dbl_array(double **p, int nrows, int ncols){
  int n = nrows * ncols;
  while(n-- > 0){
    **p++ = 0.0;
  }
} 
#包括
无效重置\u 2D\u dbl\u数组(双**p、整数nrows、整数ncols);
int main(){
双大_矩阵[10][10];
重置2D_dbl_阵列(大矩阵,10,10);
标准::cout(0){
**p++=0.0;
}
} 
我不明白它为什么不起作用

我从新书《不耐烦的人的C++》中获取了代码,但它仍然不起作用

我想在函数中使用两个“at”符号来更改没有索引和方括号的值

编辑: 更多信息请看我的第二条评论,谢谢:)

编辑2:
粘贴了错误的代码:)

,因为双指针不会衰减为双数组。只需向函数传递一个双数组:

void reset_double_array(double p[][10], int nrows, int ncols);
为了解释为什么会这样,请


看到你已经标记了你的问题C++,你应该真正使用“代码> STD::vector < /代码>来代替你的矩阵,并且为指针和原始数组节省麻烦。

STD::CUT

这里不太清楚你在做什么。看起来好像您正在尝试设置每行的第一个双精度值。在这种情况下,应采取以下措施:

void reset_double_array(double **p, int nrows, int ncols)
{
    double* val = *p;
    while(nrows-- > 0)
    {
        *val = 1.0;
        val += ncols;
    }
}

您需要将其作为
double
数组传递

void reset_double_array(double p[][10], int nrows, int ncols){
   for(int i=0;i<nrows;i++)
     for(int j=0;j<ncols;j++)
        p[i][j]=1.0;
}
void reset_double_数组(double p[][10],int nrows,int ncols){

对于(int i=0;i,可以使用如下指针:

无效重置\u 2D\u dbl\u数组(双*p、整数nrows、整数ncols) { .... }

然后,当您通过实际二维阵列时:

重置2D_dbl_数组(&big_矩阵[0][0],10,10)


reset_2D_dbl_数组(big_matrix[0],10,10);

同样,“矩阵”或“双数组”是用户的抽象,内存或C中没有“双数组”这样的东西@内存中的所有东西都是1维的。@ C++中的USER 24857 C++,这个问题被标记为语言,内存是一个内存位置集群的群岛。@ R.M. MtTiHufnnand,你是什么意思?内存中有很多跳跃?2D内存?@ USER 24857“一个大数组”.@ r.MaTiHHOFFNANDENS,我在哪里可以……我也不认为POD数组是C++世界的C++数据结构,更像是一个C语言数据结构,它与旧语言兼容,这是问题所在,在我从新的一本书中学习到的(C++ 11也是如此),它们不使用任何方括号,只是“AT”。“像我一样签名…(我不是想按enter lol)他们像传递正则变量一样传递它,然后像指针一样使用它..关于cout,我忘了我已经修好了,我给你的代码错了,对不起lol..你不能不耐烦,你是个程序员。lol,这本书就是这么叫的:P我不是不耐烦的:P
std::cout << big_matrix[9][9]; //instead of std::cout << big_matrix[9];