作者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
→ ajnightmare:如果還不懂,去問宅神爺 01/09 01:51
→ ajnightmare:特別感謝宅神爺,以及Cpp皇帝加持 01/09 01:57