作者ajnightmare (阿华田)
看板NTUBIME100HW
标题[C++ ] 二维阵列传址示范
时间Wed Jan 9 01:31:38 2008
大家好像都有阵列变数放在globe的问题
不解决好像也不行
所以只好尝试说明看看
希望有点帮助
----------------------------------------
// 示范二维阵列的传址
#include "stdafx.h"
#include <iostream>
using namespace std;
//三个变数
//第一个是存位置,第二个存第横排数目大小(维度),第三个存直排数目大小(维度)
void cal(int**b_pt_pt,int size_x,int size_y)
{
//把a[0][2]的值乘两倍
b_pt_pt[0][2]*=3;
}
int main()
{
//a是一个我想要拿来传给另外一个函式做处理的二维阵列
//所谓的a[2][3]可以想成每个a[i]长度都有3
//实际上记忆的方式是一直线a={5,6,7,1,2,3}
//然後依据你所给的维度大小作切割的感觉
//画个座标,方便看
//0 1 2
int a[2][3]={{5,6,7}, //0
{1,2,3}}; //1
//a_pt是个指标,拿来指a阵列的a[0][0]跟a[1][0]的位置
//为什麽要这样做呢?
//因为只要知道阵列的每一横排的第一个位置,又知道它的长度是3
//譬如a[1][0]是第二横排的第一位置,长度是3
//由於在电脑中记忆的方式是一直线,(a={5,6,7,1,2,3})
//所以我可以知道,这个位置的值(是1)+一个单位长,会是2,再+一个单位,就会是3
//接下来,由於我知道,长度是3,所以我不可以再继续加了
int*a_pt[2];
//a_pt阵列长相如下
//a_pt={a[0][0]的位置,a[1][0]的位置}
//a_pt_pt是拿来指a_pt[0]的位置
//假如我知道a_pt阵列的长度是2
//那我同样的也可以在a_pt_pt的值(a_pt[0]的位置)+一个单位
//得到(a_pt[1]的位置)
//实际上就是间接的指a[0][0]的位置,a[1][0]的位置
int**a_pt_pt;
for(int i=0;i<2;i++)//让a_pt指到a[0][0]跟a[1][0]的位置
{
a_pt[i]=&a[i][0];
}
//再让a_pt_pt指到a_pt[0]的位置
a_pt_pt=&a_pt[0];
cout<<a_pt_pt[0][2]<<endl;
//改变a的值
cal(a_pt_pt,2,3);
//输出改变後的结果
cout<<a_pt_pt[0][2]<<endl;
system("pause");
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.74.67.96
1F:→ ajnightmare:如果还不懂,去问宅神爷 01/09 01:51
2F:→ ajnightmare:特别感谢宅神爷,以及Cpp皇帝加持 01/09 01:57