这段代码有什么问题


#include<iostream.h>
int a[4][5]={1,2,0,4,1,16,11,21,0,2,2,0,3,1,3,0,0,0,0,0};

void val(int j)
{
int t2[100];
int t1[3];
int k(0);
for(int i=2;i>=0;i--)
{
t1[2-i]=a[i][j];//无法给t1赋值
}
i=2;
while(t2[i])
{
t1[k++]=t2[i]%10;
t2[i]/=10;
}

for(i=0;i<k;i++)
{
a[3][j]=(a[3][j]+t2[i])*10;
}
}

void main(){
val(1);
for(int i=0;i<4;i++)
{for(int j=0;j<5;j++)
cout<<a[i][j]<<'\t';
cout<<endl;
}}

看我加中文注释的地方,这里a[i][j],i的值都在变化,但是无法给t1[2-i][j]赋值?我打开断点调试,发现t1[2-i][j]的值一直是原始的随机值,怎么回事?我很奇怪啊,谁能看看,最好是也打开断点调试器看看

#include <iostream>
using namespace std;

int a[4][5]={1,2,0,4,1,16,11,21,0,2,2,0,3,1,3,0,0,0,0,0};

void val(int j)
{
int t2[100];
int t1[3];
int k(0);
int i;
for(i=2; i>=0; i--)
{
t1[2-i] = a[i][j];    // 如下输出赋值后的值是完全相同
cout << t1[2-i] << "\t" << a[i][j] << endl;
}
i=2;
while(t2[i])
{
t1[k++]=t2[i]%10;
t2[i]/=10;
}

for(i=0; i<k; i++)
{
a[3][j] = (a[3][j] + t2[i]) * 10;
}
}

int main()
{
val(1);
for (int i=0; i<4; i++)
{
for (int j=0; j<5; j++)
cout << a[i][j] << '\t';
cout << endl;
}
return 0;
} 展开追问 追问 真的是的,但是调试器里怎么显示不一样,搞笑了
t1是一维数组 哪来的[j] 展开追问 追问 笔误,但是你看看我源程序是写的t1[2-i] 回答 第一次是a[2][1] 第二次是 a[3][1] 请问这2个值是多少? 哦 说错了 是减去 第二次是a[1][1] 这个2个值 追问 不知道你说什么,你自己看,数组a就在第二行,但是无所谓了,在我加注释的那一行加断点,然后调试就看到了,赋值操作符两边的值居然不相等,真TM奇怪
没有初始化
#include<iostream.h>
int a[4][5]={1,2,0,4,1,16,11,21,0,2,2,0,3,1,3,0,0,0,0,0};
void val(int j)
{
    int t2[100];
    int t1[3];
    int k(0);
    for(int i=2;i>=0;i--)
    {
t1[2-i]=a[i][j];//无法给t1赋值
cout<<t1[2-i]<<" "<<a[i][j]<<endl;//输出t1[2-i],和a[i][j]的值,发现赋值是正确的
    }     
    i=2;
    while(t2[i])//但是t2没有初始化,关键在这里
    {
t1[k++]=t2[i]%10;
t2[i]/=10;
    }
cout<<k<<endl;
for(i=0;i<k;i++)
{
a[3][j]=(a[3][j]+t2[i])*10;
}
}

void main()
{
val(1);
for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
cout<<a[i][j]<<'\t';
cout<<endl;
}
}

程序结果里,t1是正确赋值了



Copyright © 2009-2011 All Rights Reserved.