指標是用來指向記憶體位址的,可用*設指標變數跟取指向位址的值。&就是取變數記憶體位址。記著上述便可先初步理解指標作用與作法。
陣列位址
指標n跟陣列名稱v皆會指向陣列v的開頭位址,因此將指標指向陣列的開頭位址後,便可用*(n+i)、n[i]等跟矩陣v一樣的方式對陣列取值或設值(i為索引值)。
一維陣列
取值:*(v+i)=v[i]
陣列v圖示:
用法如下:
int v[3]; // 設定陣列 int *n=v; //設指標n指向陣列v的開頭v[0]位址 // [] 為下標運算子 n[2]=2; // 指標n指向的位址v[2]變數值設2 printf("n[2]=%d\n", n[2]); // n[2]=2 //可用a[b]=*(a+b)方式取用list *(n+1)=1; // *(n+1)會取出&v[1]位址,再用*取值 *(v+0)=0; // 強制讓v轉形成&v[0]位址,再用*取值 printf("v[0]=%d\n",v[0]); // v[0]=0 printf("n[1]=%d\n", n[1]); // n[1]=1 printf("v[1]=%d\n", v[1]); // v[1]=1
指標n指向陣列v的開頭位址,可直接用*取出n指向位址的值,n++會移動指標n指向的位址,用法如下:
int v[5]={1,2,3,4,5}; // list int *n; // 宣告一個指標 // 將指標指向list的開頭位址,n++會往下移動指標所指的位址 for(n=v; n!=&v[5]; n++){ printf("%d\n", *n); // 印出指標所指向的位址儲存的值 }
二維陣列
指標指向位址:*(arr+i)+j
取值:*(*(arr+i)+j)=a[i][j]
二維陣列乘法(矩陣乘法)
程式碼:
for (int i = 0; i < row; i++){ for (int k = 0; k < col; k++){ // 先建立C矩陣 C[i][k] = 0; for (int j = 0; j < mid; j++){ // A矩陣的直行、B矩陣的橫列 C[i][k] = C[i][k] + A[i][j] * B[j][k]; } printf("%d, ", C[i][k]); } printf("\n"); }