循环后变量值突然发生变化

Variable changed value suddenly after Loop

本文关键字:变化 突然 变量值 循环      更新时间:2023-10-16

矩阵nablist有问题。当我第一次打印nablist时,nablist是绝对正确的,但当我再次打印时,值完全错误。我认为问题是一致的:

nablist[i,nnab[i]]=j

因为我试着把一个指针作为索引。知道吗?

我有以下代码:

#include <stdio.h>
#include <windows.h>         
int main(int argc, char **argv) 
int n=902; 
int i,j;
int* nnab=new int[nmax];
int* nablist=new int[nmax,6];

 for (i=0;i<n;i++)
 {
   nnab[i]=0;
   for (j=0;j<6;j++)
   {
      nablist[i,j]=0;
   }
 }
   for (i=0;i<n-1;i++)
   {
      for (j=i+1;j<n;j++)
      {   
       nnab[i]=nnab[i]+1;  
       nablist[i,nnab[i]]=j;
       cout<<nablist[i,nnab[i]]<<endl;  //first print
      } 
    }
    for (i=0;i<n-1;i++)
    {
     cout<<nablist[i,nnab[i]]<<endl;  //second print
    }
 }

谢谢你的回答。是的,问题是我需要使用多对方括号。我尝试使用int (*ptr)[5] = new int[5][10];,但出现了一个错误。我想定义一个有n行m列的二维数组。我想使用一个文本文件来读取n,m变量,以便定义2D数组。。我该怎么做?你明白我的意思吗?感谢

尝试修复以下警告:

 % g++ test.cpp -Wall
test.cpp: In function ‘int main(int, char**)’:
test.cpp:13:27: warning: left operand of comma operator has no effect [-Wunused-value]
 int* nablist=new int[nmax,6];
                           ^
test.cpp:21:17: warning: left operand of comma operator has no effect [-Wunused-value]
       nablist[i,j]=0;
                 ^
test.cpp:30:24: warning: left operand of comma operator has no effect [-Wunused-value]
        nablist[i,nnab[i]]=j;
                        ^
test.cpp:31:30: warning: left operand of comma operator has no effect [-Wunused-value]
        cout<<nablist[i,nnab[i]]<<endl;  //first print
                              ^
test.cpp:37:28: warning: left operand of comma operator has no effect [-Wunused-value]
      cout<<nablist[i,nnab[i]]<<endl;  //second print

您应该阅读有关逗号运算符的文档。维基百科说:

在C和C++编程语言中,逗号运算符(由令牌表示,)是一个二进制运算符,用于计算第一个操作数并丢弃结果,然后计算第二个操作数操作数,并返回此值(和类型)。

并在网上搜索如何用C/C++做二维数组。

我想我知道问题出在哪里了。当你想要制作2D阵列时,你需要使用多对方括号:
int arr[10][10];

当您想访问数组中的对象时也是如此:
arr[2][3] = 0;

您必须这样使用new
int (*ptr)[5] = new int[5][10];
int (*ptr)[10] = new int[5][10];

如果是3D阵列,它将是
int (*ptr)[7][8] = new int[7][8][9];
int (*ptr)[8][9] = new int[7][8][9];

最后一件事:当你不再需要new创建的数组时,不要忘记删除它们:

int *p = new int[1000];
// ...
delete [] p;