循环后突然变化值变化

时间:2014-04-22 10:42:20

标签: c++ variables

我遇到了一个名为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列的2D数组。我想用一个文本文件来读取n,m变量以定义2D数组。我该怎么做?你明白我的意思吗? 谢谢

2 个答案:

答案 0 :(得分:2)

尝试修复以下警告:

 % 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 ++中进行二维数组。

答案 1 :(得分:0)

我想我知道问题出在哪里。 想要制作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;