读书人

栈上分配数组,该怎么处理

发布时间: 2012-06-10 14:03:15 作者: rapoo

栈上分配数组
今天碰到一个面试题,感慨找工作真难,分享给大家:

C/C++ code
#include <iostream> using namespace std;void main(){    int** arr=NULL;     //int型二维数组    int rows,columns;    cin>>rows;        //2    cin>>columns;    //3            //请在此处编写代码,根据rows和columns在栈上分配一个数组arr    ...你的代码...            //赋值给数组元素    for (int rowIndex=0;rowIndex<rows;rowIndex++)    {        for (int columnIndex=0;columnIndex<columns;columnIndex++)        {            arr[rowIndex][columnIndex]=columnIndex+(rowIndex+1)*1000+1;        }    }        //打印每个数组元素    for (rowIndex=0;rowIndex<rows;rowIndex++)    {        for (int columnIndex=0;columnIndex<columns;columnIndex++)        {            printf("%d ",arr[rowIndex][columnIndex]);        }        printf("\n");    }}

运行效果:

[解决办法]
这时在栈中分配,有些吓怕人啊[code=C/C#include] <iostream>
using namespace std;

void main()
{
int* arr=NULL; //** int型二维数组
int rows,columns, rowIndex, columnIndex;
cin>>rows; //2
cin>>columns; //3
int _esp;


//请在此处编写代码,根据rows和columns在栈上分配一个数组arr
// ...你的代码...
_asm { // 为完美计,下面的代码最好对 eax 和 edx 也进行保存和恢复的操作
mov eax, rows
imul columns
shl eax, 2
mov _esp, esp
sub esp, eax
mov arr, esp
}


//赋值给数组元素
for (int rowIndex=0;rowIndex <rows;rowIndex++)
{
for (int columnIndex=0;columnIndex <columns;columnIndex++)
{
arr[rowIndex*columns+columnIndex=columnIndex+(rowIndex+1)*1000+1; //**
}
}

//打印每个数组元素
for (rowIndex=0;rowIndex <rows;rowIndex++)
{
for (int columnIndex=0;columnIndex <columns;columnIndex++)
{
printf("%d ",arr[rowIndex*columns+columnIndex]); //**
}
printf("\n");
}
_asm mov esp, _esp //** 如果没有这个,带堆栈检查的话,程序运行会异常

}[/code]

读书人网 >汇编语言

热点推荐