看板 NTUBIME100HW 關於我們 聯絡資訊
大家好像都有陣列變數放在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