当前位置: 代码迷 >> 汇编语言 >> 栈上分配数组,该怎么处理
  详细解决方案

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

热度:7009   发布时间:2013-02-26 00:00:00.0
栈上分配数组
今天碰到一个面试题,感慨找工作真难,分享给大家:
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]
  相关解决方案