栈上分配数组,该怎么处理
栈上分配数组
今天碰到一个面试题,感慨找工作真难,分享给大家:
运行效果:
------解决方案--------------------
这时在栈中分配,有些吓怕人啊[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]
今天碰到一个面试题,感慨找工作真难,分享给大家:
- 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]