2014-04-22 41 views
-1

我有一个叫做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变量来定义二维数组..我该怎么做?你明白我的意思吗? 谢谢

+1

请提供一个编译代码,并且只需显示您的问题。 –

+0

'[]'运算符只需要**一个参数**。 – Walter

回答

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++中做二维数组。

0

我想我知道问题在哪里。 当你想二维数组,你需要使用多对对方括号:
int arr[10][10];

当你要访问数组对象

同一件事:
arr[2][3] = 0;

,您必须使用new像即:
int (*ptr)[5] = new int[5][10];
int (*ptr)[10] = new int[5][10];

如果是三维阵列,这将是
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; 
+0

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

+0

哦,我的错误。修复。当使用'new'创建多维数组时,您需要删除最左边的一对方括号。 ''我想用一个文本文件...'打开一个关于它的新问题。一个后一个问题。 – HolyBlackCat

+0

好!再次感谢您的回答。这很好 – z3djackal