我遇到了一个名为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数组。我该怎么做?你明白我的意思吗?
谢谢
答案 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;