为什么变量不存储值?
Why a variable is not storing the value?
在这道题中,有一个大小为 200 x 200 x 320 的立方体
现在我想为格子节点中所有 0 和 1 的点分配一个变量“isn”。
x 方向 85-115、y 方向 85-115 和 z 方向 240-270 的点阵节点的“isn”参数值分配为 1,其余节点分配为 0。
分配后,当我尝试打印节点 (100,100,255) 的“isn”值时,结果应该为 1。但它给出的是 0。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
const int nx=200, ny=200, nz=320;
int getindex1(int i, int j, int k)
{
int c = (i*(ny+2)+j)*(nx+2)+k;
return c;
}
int main()
{
int i, j, k, ia, ja, ka;
int *isn;
//******Dynamic Memory Allocation
isn = (int*) malloc (((nx+2)*(ny+2)*(nz+2)) * sizeof(int));
for(i=0;i<=nx+1;i++)
{
for(j=0;j<=ny+1;j++)
{
for(k=0;k<=nz+1;k++)
{
isn[getindex1(i,j,k)]=0;
}
}
}
for(i=0;i<=nx+1;i++){
for(j=0;j<=ny+1;j++){
for(k=0;k<=nz+1;k++){
isn[getindex1(i,j,k)]=0;
if(i>=85 && i<=115 && j>=85 && j<=115 && k>=240 && k<=270)
{
isn[getindex1(i,j,k)]=1;
printf("getindex1(%d,%d,%d)=%d\tisn=%d\n",i,j,k,getindex1(i,j,k),isn[getindex1(i,j,k)]);
}
if(i==100 && j==100 && k==255)
{
printf("\n\ngetindex1(100,100,255)=%d\tisn=%d\n\n",getindex1(100,100,255),isn[getindex1(100,100,255)]);
}
}
}
}
printf("\n\ngetindex1(100,100,255)=%d\tisn=%d\n\n",getindex1(100,100,255),isn[getindex1(100,100,255)]);
return 0;
}
你搞错维度了,指标计算应该是
(i * (ny + 2) + j) * (nz + 2) + k
如果你引入代表张量维度的变量,你的逻辑将更容易管理,如下所示:
int isnLayers, isnRows, isnCols;
isnLayers = nx + 2;
isnRows = ny + 2;
isnCols = nz + 2;
isn = malloc(sizeof (*isn) * isnLayers * isnRows * isnCols);
for (i = 0; i < isnLayers; i++) {
for (j = 0; j < isnRows; j++) {
for (k = 0; k < isnCols; k++) {
...
}
}
}
在这道题中,有一个大小为 200 x 200 x 320 的立方体 现在我想为格子节点中所有 0 和 1 的点分配一个变量“isn”。 x 方向 85-115、y 方向 85-115 和 z 方向 240-270 的点阵节点的“isn”参数值分配为 1,其余节点分配为 0。 分配后,当我尝试打印节点 (100,100,255) 的“isn”值时,结果应该为 1。但它给出的是 0。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
const int nx=200, ny=200, nz=320;
int getindex1(int i, int j, int k)
{
int c = (i*(ny+2)+j)*(nx+2)+k;
return c;
}
int main()
{
int i, j, k, ia, ja, ka;
int *isn;
//******Dynamic Memory Allocation
isn = (int*) malloc (((nx+2)*(ny+2)*(nz+2)) * sizeof(int));
for(i=0;i<=nx+1;i++)
{
for(j=0;j<=ny+1;j++)
{
for(k=0;k<=nz+1;k++)
{
isn[getindex1(i,j,k)]=0;
}
}
}
for(i=0;i<=nx+1;i++){
for(j=0;j<=ny+1;j++){
for(k=0;k<=nz+1;k++){
isn[getindex1(i,j,k)]=0;
if(i>=85 && i<=115 && j>=85 && j<=115 && k>=240 && k<=270)
{
isn[getindex1(i,j,k)]=1;
printf("getindex1(%d,%d,%d)=%d\tisn=%d\n",i,j,k,getindex1(i,j,k),isn[getindex1(i,j,k)]);
}
if(i==100 && j==100 && k==255)
{
printf("\n\ngetindex1(100,100,255)=%d\tisn=%d\n\n",getindex1(100,100,255),isn[getindex1(100,100,255)]);
}
}
}
}
printf("\n\ngetindex1(100,100,255)=%d\tisn=%d\n\n",getindex1(100,100,255),isn[getindex1(100,100,255)]);
return 0;
}
你搞错维度了,指标计算应该是
(i * (ny + 2) + j) * (nz + 2) + k
如果你引入代表张量维度的变量,你的逻辑将更容易管理,如下所示:
int isnLayers, isnRows, isnCols;
isnLayers = nx + 2;
isnRows = ny + 2;
isnCols = nz + 2;
isn = malloc(sizeof (*isn) * isnLayers * isnRows * isnCols);
for (i = 0; i < isnLayers; i++) {
for (j = 0; j < isnRows; j++) {
for (k = 0; k < isnCols; k++) {
...
}
}
}